Новости JavaScript

Как Microsoft хочет изменить JavaScript и TypeScript

Это предложение может изменить JavaScript и TypeScript

В прошлую среду, 9 марта 2022 года, Microsoft объявила о своей поддержке замечательного предложения по дальнейшему развитию JavaScript и TypeScript.

Пока это только предложение, которое доступно как так называемое предложение Этапа 0, но Microsoft уже заявила, что хочет представить это предложение в TC39 (Технический комитет 39) вовремя. Если это предложение будет принято и будет реализовано, то это, безусловно, самый большой переворот, который когда-либо происходил с JavaScript.

История JavaScript

Если мы оглянемся на 20 лет назад и сравним веб-разработку сейчас и тогда, то заметно, что, хотя JavaScript как язык программирования немного развился, в экосистеме вокруг JavaScript произошел гораздо больший прогресс.

Эти два пункта необходимы взаимно, потому что, с одной стороны, JavaScript-сообщество за последние два десятилетия стало гораздо более профессиональным, а с другой стороны, фундаментальная проблема интернета становится все более важной. Как разработчик, вы не можете контролировать, какие браузеры будут использовать пользователи.

Это означает, что вы можете использовать современные функции JavaScript, только если пользователь регулярно обновляет свой браузер. Это, вероятно, имеет место для отдельного человека, поскольку многие браузеры в наши дни обновляются сами или указывают на обновление без запроса, но это не относится к компаниям.

Существуют строгие правила в отношении программного обеспечения и обновлений программного обеспечения. Многие компании работают с устаревшим программным обеспечением или пользуются устаревшими браузерами. Это фундаментальная проблема, которая также затрагивает HTML и CSS, а также языки программирования, которые должны интерпретироваться соответствующим браузером и, следовательно, сильно зависят от них.

Транспилятор и Бандлер

Как веб-разработчик, вы столкнулись с проблемой выбора между двумя идеологиями: либо вы полагаетесь на современные функции JavaScript, CSS или HTML, которые упрощают программирование или приводят к лучшим результатам с точки зрения удобства использования и т. д., либо вы обходитесь без этих современных технологий. функции, потому что они доступны не всем из-за устаревшего браузера. Обновление может вызвать ошибки для определенного количества пользователей.

Кроме того, на протяжении десятилетий не существовало приличной модульной системы для JavaScript. Node.js получил свой стандарт с CommonJS, но он был ограничен только сервером.

В браузере давно ничего не происходило, поэтому вместе с транспайлером пришел и бандлер. И хотя вы работаете с скомпилированным языком программирования JIT (Just-in-time), который мог нормально выполняться, вам всегда приходилось иметь дело с довольно сложным процессом сборки, который превращал исходный код в фактический код, который затем выполнялся. и интерпретируется в браузере.

Такова была ситуация лет десять назад.

Расцвет TypeScript

В этот момент, ровно десять лет назад, Microsoft изобрела TypeScript. Microsoft посчитала, что если вам все равно нужен транспилятор для преобразования кода JavaScript перед развертыванием, дополнительный шаг в этом процессе сборки в любом случае не будет иметь большого значения.

Взамен вы получаете хороший транспилятор, который конвертирует современный JavaScript в ванильный JavaScript. Кроме того, TypeScript был статической системой типов, которая сделала JavaScript гораздо более масштабируемым, привнесла новые концепции и внесла значительный вклад в возможность эффективной разработки JavaScript в команде.

Неудивительно, что TypeScript очень быстро зарекомендовал себя и сегодня стал стандартом для корпоративной разработки JavaScript.

Теперь, за последние десять лет, мир тоже изменился. Браузеры, которые не обновляются и не обновляются сами, все еще не вымерли, но сегодня они играют гораздо меньшую роль, чем раньше.

Это означает, что теперь вполне возможно работать без транспилятора, если обращаться только к Evergreen Browsers, а с ESM (модулями ECMAScript) теперь доступна и нативная модульная система на основе JavaScript, которая работает как на сервере, так и на сервере. сторону и сторону клиента.

Это означает, что упаковщик больше не нужен, по крайней мере, с технической точки зрения. Упаковщик — это еще один шаг к оптимизации HTTP-запросов, чтобы с сервера загружалось меньше мелких отдельных файлов, а только несколько больших. Это просто, в конце концов, можно сделать гораздо эффективнее.

TypeScript — препятствие?

Это означает, что процесс сборки будет постепенно становиться проще или менее актуальным. Теперь Microsoft ожидает будущее, в котором единственным оставшимся необходимым инструментом будет компилятор TypeScript, потому что веб-браузеры и другие среды выполнения JavaScript просто не понимают TypeScript.

Это означает, что Microsoft или TypeScript внезапно превращаются из чрезвычайно практичного инструмента в довольно раздражающую вещь. По словам Microsoft, они не хотят быть препятствием, вместо этого они хотят вдохновлять разработчиков.

Чтобы разбить его на результат, которого опасалась Microsoft, рано или поздно разработка JavaScript может стать такой же быстрой, прямой и эффективной, как это было 20 лет назад, потому что рано или поздно транспиляторы и т. д. больше не будут нужны, если не будет использоваться TypeScript.

TypeScript для браузера

Теперь очевидным выходом было бы потребовать интеграции TypeScript в качестве альтернативного языка программирования для JavaScript в веб-браузерах и других средах выполнения. Теоретически это не так уж и надумано. Дено уже пытается это сделать определенным образом.

Для Node.js доступен пакет npm под названием ts-node, который использует тот же подход, что и Deno. Компиляция в память при сборке/загрузке приложения, так что может показаться, что TypeScript запускается сразу, но на самом деле это не так.

Кроме того, TypeScript теперь также стал намного более сложным языком программирования, и для Microsoft нежелательно интегрировать все функции компилятора TypeScript непосредственно в обычные веб-браузеры. Это будет очень сложная миссия и потребует сотрудничества Apple, Google, Mozilla и т. д. для интеграции нового большого стандарта.

Microsoft избегает всех этих усилий, справедливо это или нет, это открытый вопрос, но заявление заключается в том, что они просто не хотят этого делать.

JSDoc как (предыдущий) средний путь

Вместо этого теперь рассматривается другой подход, и это, наконец, подводит нас к предложению, сделанному Microsoft на прошлой неделе. Каждый, кто знаком с TypeScript, знает, что есть средний путь между (а) написанием ванильного JavaScript и, с другой стороны, (б) полным переходом на TypeScript.

TypeScript позволяет вам анализировать код на JavaScript, и вы даже можете хранить там типы без необходимости писать TypeScript, просто написав соответствующие комментарии JSDoc. Для некоторых компаний это способ получить поддержку типов от компилятора TypeScript без необходимости полного переноса проектов на TypeScript.

Большим преимуществом является то, что код, поскольку это все еще чистый классический JavaScript, с одной стороны, не нужно компилировать, а также в том, что от TypeScript очень легко отказаться в любой момент, просто удалив все комментарии JSDoc. Я сам работал с JSDoc, но должен сказать, что он больше похож на дешевую альтернативу TypeScript.

Приходится писать больше кода, все как-то громоздко, а более сложная типизация становится почти невозможной, но все же лучше, чем вообще без типов.

Предложение: типы как комментарии

Таким образом, предложение, которое поддерживает Microsoft, состоит в том, чтобы рассматривать аннотации Typescript как комментарии, потому что тогда вам больше не придется компилировать TypeScript.

Аннотации типов и ключевые слова (такие как «публичный» или «частный») будут рассматриваться как комментарии, которые будут игнорироваться во время выполнения JavaScript. Это означает, что вы можете писать TypeScript без необходимости компилировать ваш TypeScript в код JavaScript.

Однако вы по-прежнему можете использовать компилятор TypeScript для запуска проверки типов, но вам не придется компилировать код для его выполнения. Так называемые файлы «d.ts» больше не нужны, поскольку типы будут доступны в коде JavaScript.

Таким образом, компилятор TypeScript будет только необязательным дополнением, таким как линтер, такой как ESLint, и все аннотации типов будут невидимы в исполняемом коде.

И именно поэтому предложение называется Типы как комментарии.

Недостатки типов в качестве комментариев

Когда я впервые прочитал это,мне понравилась идея, я хотел, чтобы это произошло. Но теперь я немного подумал об этом и снова и снова перечитывал предложение, и я должен признать, что настроен скептически. В теории звучит здорово, но я вижу некоторые недостатки.

Мы не должны забывать, что TypeScript состоит не только из примитивных типов параметров функций, мы говорим об интерфейсах, типах объединения, ключевом слове типа, очень сложных и вложенных типах, ключевом слове «как», общедоступных/частных/защищенных ключевых словах, универсальных типах. и так далее.

И все это должно рассматриваться JavaScript как комментарий в будущем, помимо реальных комментариев, которые мы уже пишем. И я не хочу сказать, что это невозможно, но вместо того, чтобы иметь два типа комментариев (однострочные и блочные комментарии), у вас есть много разных новых типов комментариев для выражения ключевых слов сразу.

И поэтому я должен спросить себя, хороший ли это путь, потому что на самом деле мне нравится текущее решение, даже если оно не идеально и даже если его нужно сначала скомпилировать.

Кроме того, кажется, что нам пришлось бы кодировать без перечислений, потому что они представляют собой смесь значений и типов. Сюда также входят пространства имен, поддержка JSX TypeScript, свойства параметров и т. д. Итак, если вы хотите использовать перечисления, вам нужно компилировать, но если вы не используете перечисления, вам не нужно компилировать.

Я не вижу реального разделения между JavaScript и TypeScript с этим предложением. И я сомневаюсь, что это должно быть будущее.

На мой взгляд, это приведет к путанице и новому двухуровневому сообществу разработчиков TypeScript.

Последние мысли

На мой взгляд, TypeScript должен либо оставаться полностью автономным, даже если вам придется его компилировать, либо JavaScript должен получить необязательную статическую систему типов, как это делает TypeScript.

Это означает, что TypeScript должен стать новым JavaScript, но Microsoft уже исключила это. Поэтому я прихожу к выводу, что TypeScript не следует принципиально менять таким образом, особенно в том виде, в каком он в настоящее время предлагается и поддерживается Microsoft.

В любом случае, мне любопытно посмотреть, как это будет развиваться в течение следующих нескольких месяцев и лет.

Ваше здоровье!

Источник