Typescript Express = заблокирован в цикле конфигурации

#node.js #typescript #es6-modules

Вопрос:

Я хочу использовать модули ES6 в своем приложении.

Если я установлю "module": "es2020" или "module": "esnext" получу ошибку To load an ES module, set "type": "module" in the package.json or use the .mjs extension.

Поэтому я устанавливаю "type" : "module" в своем package.json и получаю сообщение об ошибке, Unknown file extension ".ts" поэтому я не могу его использовать. Я тоже не могу использовать .mjs расширение в машинописном тексте.

Поэтому я установил "module": "commonjs" "esModuleInterop": true и могу использовать модули ES6 с машинописным текстом. Но потом я хочу использовать import.meta , и я получаю ошибку, в которой говорится, что the 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'esnext', or 'system'.

Я пробежал полный круг. Существует ли конфигурация, которая позволит мне использовать машинопись с узлом без компромиссов? Это только import.meta сейчас, но я не уверен, какие еще функции будут заблокированы при такой настройке.

Ответ №1:

Я решил эту проблему с помощью экспериментальной функции. Вместо запуска команды ts-node для запуска кода, который я использовал:

TS_NODE_PROJECT='./tsconfig.json' node --loader ts-node/esm ./src/index.ts

Это позволяет мне использовать "type": "module" и "module": "esnext" вместе с машинописным текстом, и у меня есть как импорт ES6, так и доступ к import.meta нему .

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

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

1. я довольно новичок в этом, но я не думаю tsconfig "type" , что он вообще примет ключ. ты это имел в виду "types": [...] ?