Как импортировать модули esm с NodeJS 13 и Typescript 3.8? - PullRequest
0 голосов
/ 29 апреля 2020

У меня проблема с некоторыми импортами в NodeJS. Я хочу использовать новые функции Typescript 3.8, такие как приватные поля: # myPrivateField

Я не знаю, как правильно импортировать модуль «машинопись» в моем классе. Я перепробовал много вариантов, но решить проблему не смог.

Мои файлы:

пакет. json

{
  "name": "test",
  "scripts": {
    "start": "tsc && node --experimental-modules --es-module-specifier-resolution=node index.js"
  },
  "dependencies": {
    "@types/node": "^13.13.2",
    "app-root-path": "^3.0.0",
    "fs-extra": "^9.0.0",
    "tsutils": "^3.17.1"
  },
  "devDependencies": {
    "ts-node": "~8.3.0",
    "typescript": "^3.8.3"
  },
  "type": "module"
}

tsconfig. json

{
  "compilerOptions": {
    "lib": [
      "ESNext",
      "es2016",
      "dom",
      "es5"
    ],
    "module": "esnext",
    "moduleResolution": "Node",
    "sourceMap": true,
    "target": "es6",
    "typeRoots": [
      "node_modules/@types"
    ]
  }
}

main.ts

// import ts = require("typescript");
import * as ts from "typescript";

export class Main {

    node: ts.Node;
    #test = 'zzz';

    constructor() {}

    process(): void {
        ts.forEachChild(this.node, function cb() {
        });
        console.log('#test', this.#test);
    }
}

const main = new Main();
main.process();

При использовании этого кода при запуске npm run start появляется ошибка TypeError: ts.forEachChild is not a function

Без строки с ts.forEachClid() он правильно записывает значение частного поля # test.

Если я попытаюсь заменить import * as ts from "typescript"; на import ts = require("typescript");, у меня будет ошибка TS1202: Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from "mod"', 'import {a} from "mod"', 'import d from "mod"', or another module format instead

Конечно, я пробовал много изменений в tsconfig. json и в package. json (с `" type "=" module "), но решить эту проблему невозможно.

Я даже пытался заменить "module": "esnext" на "module": "commonjs", но у меня ошибка exports is not defined.

Примечание: Это не указывается c для модуля "машинопись". У меня та же проблема с другими модулями, такими как "fs-extra", которые выполняют экспорт не так, как большинство модулей classi c NodeJS.

Например, экспорт модуля "машинопись" с export = ts.

Я тоже нашел эту ссылку, но она мне не сильно помогла: https://www.typescriptlang.org/docs/handbook/modules.html

Моя nodeJs версия - 13,3. 0 и моя машинописная версия 3.8.3 Спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...