В TypeScript 4.5 НЕ будет поддержки ESM
В бете TS 4.5 была представлена поддержка ESM, но она не войдет в финальный билд.
Причины довольно разные:
1. Баги
Т.к. фича сложная, то, очевидно, есть пространство для багов.
2. Странный UX
Например, проблемы с описанием exports для package.json, сложности с определением является ли ESM или CJS текущий модуль.
3. Несовместимость с экосистемой
Вот здесь очень забавно: ts-node, Webpack и Vite не очень любят импорты, заканчивающиеся на *.js. Но при этом ts-node, Webpack, Vite и Deno спокойно воспринимают *.ts, а TS не позволяет этого. Ну и опять сложности с описанием types в exports.
На самом деле очень сложно как-то кратко суммировать оригинальное ишью, так что автором библиотек точно стоит почитать.
Таким образом, ESM пока что будет доступен только в nightly версиях.
А основной релиз не стоит ожидать раньше февраля.
P.S. Иногда мне кажется, что мир без ESM был бы сильно проще, и это какая-то бесконечная история, абсолютно несовместимая с текущей экосистемой.
В бете TS 4.5 была представлена поддержка ESM, но она не войдет в финальный билд.
Причины довольно разные:
1. Баги
Т.к. фича сложная, то, очевидно, есть пространство для багов.
2. Странный UX
Например, проблемы с описанием exports для package.json, сложности с определением является ли ESM или CJS текущий модуль.
3. Несовместимость с экосистемой
Вот здесь очень забавно: ts-node, Webpack и Vite не очень любят импорты, заканчивающиеся на *.js. Но при этом ts-node, Webpack, Vite и Deno спокойно воспринимают *.ts, а TS не позволяет этого. Ну и опять сложности с описанием types в exports.
На самом деле очень сложно как-то кратко суммировать оригинальное ишью, так что автором библиотек точно стоит почитать.
Таким образом, ESM пока что будет доступен только в nightly версиях.
А основной релиз не стоит ожидать раньше февраля.
P.S. Иногда мне кажется, что мир без ESM был бы сильно проще, и это какая-то бесконечная история, абсолютно несовместимая с текущей экосистемой.