TypeScript: какова «правильная» `цель` для узла 11?

#node.js #typescript

#node.js #typescript

Вопрос:

TypeScript имеет target конфигурацию со многими значениями, такими как esnext , es2015 es6 и т.д. (очень запутанный)

Текущая версия NodeJS (11.11.0) поддерживает многие новые функции JavaScript. Можно ли настроить таргетинг esnext на TypeScript? будет ли это работать?

Если нет, то что правильно target использовать при таргетинге на NodeJS 11.11.0

Редактировать:

Благодаря @Seblor мы знаем, что esnext это очень динамично, и TC39 может добавлять функции по своему усмотрению. Она представляет следующую версию JavaScript, над которой ведется работа (в отношении согласования функций)

Уточненный вопрос должен быть таким: в соответствии с текущей версией NodeJS (11.11.0) и текущей версией TypeScript (3.3) можем ли мы использовать esnext как target ?

Комментарии:

1. es2015 и es6 одинаковы. esnext — это следующая версия на момент написания. Более подробная информация здесь: en.wikipedia.org/wiki/ECMAScript

2. Выглядит esnext очень динамично и всегда может измениться, но TypeScript поддержка esnext статична (для каждой версии)

3. esnext «изменится» после выпуска новой версии ECMAScript.

Ответ №1:

На основе сопоставления целевого узла на TypeScript wiki, "es2018" является правильным сопоставлением для узла 10, "es2019" является правильным сопоставлением для узла 12. Кажется, что версии Node, отличные от LTS, не документированы, но, учитывая эту информацию, я чувствую, что "es2018" это самая безопасная цель.

Комментарии:

1. Здорово, что эта информация есть в TypeScript wiki. Спасибо!

Ответ №2:

Глядя на node.green, поддержка ES2018, похоже, в Node 11.11.0 полная, поэтому вы должны быть в состоянии установить ES2018 в качестве цели без проблем.

Вы можете испытать свою удачу, используя ES2019 или даже ESnext, поскольку поддержка выглядит достаточно хорошо. Однако я не знаю, будет ли typescript использовать еще не реализованные функции, если вы используете ESnext в качестве цели (например, частные свойства).

Лично я бы придерживался ES2018, поскольку не вижу необходимости настаивать на ESnext.

Комментарии:

1. @RTW На самом деле я смотрел на Этап 3, который был (на тот момент : web.archive.org/web/20190318210754/https://node.green ) в основном покрыто. Нет реального смысла использовать этап 2 (или ниже), поскольку они, вероятно, подвержены изменениям

Ответ №3:

Хорошо, итак, ответ (как обычно) зависит! Это зависит от функций, которые вы планируете использовать. Версия TypeScript, target на tsconfig.json и версия NodeJS.

Перед использованием функции JavaScript необходимо проверить две вещи:

  1. Вы должны посмотреть на эту таблицу и посмотреть на столбец вашей целевой среды, в моем случае это столбец NodeJS. И убедитесь, что ячейка зеленая. Красный цвет означает, что вы не можете запустить эту функцию в этой среде.

  2. Убедитесь, что вы можете скомпилировать свой код с помощью TypeScript. Если вы можете скомпилировать код с помощью TypeScript, все в порядке. Обратите внимание, что вы не можете рассчитывать на столбец TypeScript. Красная ячейка означает, что скомпилированный код не будет выполняться на предыдущей версии JavaScript…

Например BigInt :

TypeScript с target: "esnext" без проблем скомпилирует код с bigint (пока ячейка поддержки красная), и вы сможете запустить код JavaScript с bigint на NodeJS 11

Обратите внимание, что в левом верхнем углу находится ECMAScript группа версий. вы можете опуститься ниже, чем esnext