«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Node.js не реализовал TypeScript

Node.js не реализовал TypeScript

Опубликовано 1 ноября 2024 г.
Просматривать:525

Node.js did not implement TypeScript

Краткая статья о причинах, по которым Node.js не реализовал TypeScript.

Перво-наперво

Далее следует объяснение того, что было и что не было сделано в Node.js относительно TypeScript.

Эта статья не является критикой команды Node.js или команды TypeScript.

На самом деле все наоборот.

Я серьезно считаю, что команда Node.js сделала наилучший выбор, «реализовав» TypeScript так, как они это сделали.

Что я действительно здесь подчеркиваю, так это то, что Node.js не реализует TypeScript. Они просто добавили некоторую поддержку. Это важнейшее различие, которое, как мне кажется, часто упускают из виду в дискуссиях о Node.js и TypeScript.

За последние пару недель я насчитал более 50 статей, процитированных в прочитанных мною информационных бюллетенях, в которых упоминалось, что Node.js реализует TypeScript.

Думаю, пришло время прояснить этот момент раз и навсегда.

Спойлер: Node.js не поддерживает TypeScript.

TypeScript: краткая история и немного данных

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

Согласно последнему опросу State Of JS, TypeScript присутствует практически везде. 78% разработчиков используют TypeScript как минимум 50% своего времени разработки, поэтому неудивительно, что эхо "Node.js реализовал TypeScript" достигло даже самых глубоких уголков Интернета.

Но, чтобы внести ясность, этого не произошло. И, вероятно, никогда не произойдет.

Проблемы

Есть несколько причин, по которым Node.js не реализовал TypeScript. Вот два наиболее важных из них, на мой взгляд:

№1: TypeScript внедряет элементы во время выполнения.

Знаете ли вы, чем становится перечисление во время выполнения? Объект.

И это лишь один из, к счастью, немногих примеров того, как TypeScript внедряет элементы во время выполнения. Это проблема для Node.js, потому что это будет означать, что среда выполнения должна будет учитывать возможности TypeScript, что приведет к большим сложностям и накладным расходам.

Если Node.js хочет сохранить согласованность с ECMAScript и не иметь необходимости иметь дело с управлением зависимостями до конца своего существования, он не может принять TypeScript в качестве зависимости в текущей форме.

№2: Семантическое управление версиями.

TypeScript не поддерживает семантическое управление версиями (semver).

Node.js, с другой стороны, строго следует semver и имеет три разные версии выпуска (на данный момент у нас есть 18.x, 20.x, 22.x). Это означает, что критические изменения могут быть внесены в минорные выпуски или выпуски исправлений, что может вызвать проблемы совместимости с существующим кодом.

Кроме того, количество поддерживаемых платформ огромно, поэтому держать все под контролем непросто.

Node.js просто не может принять TypeScript в качестве зависимости, потому что это нарушит работу Semver. Это фундаментальная проблема, которая не позволяет Node.js реализовать TypeScript.

Итак, что же они сделали?

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

Хотите пример? Ну вот:

function sum(a: number, b: number): number {
  return a   b;
}

Эта функция, скомпилированная с флагом --experimental-strip-types, примет вид:

function sum(a        , b        )         {
  return a   b;
}

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

Внутренне это делается с помощью пакета amaro, который обертывает swc — известный инструмент сборки, который выполняет фактическое удаление.

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

Чао,
Майкл.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/cadienvan/nodejs-did-not-implement-typescript-1k4p?1. Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3