【发布时间】:2020-08-13 20:36:10
【问题描述】:
我在 NodeJS 中的一些导入有问题。我想使用 Typescript 3.8 的新功能,比如私有字段:#myPrivateField
我不知道如何在课堂上正确导入模块“typescript”。我尝试了很多选择,但无法解决我的问题。
我的文件:
package.json
{
"name": "test",
"scripts": {
"start": "tsc && node --experimental-modules --es-module-specifier-resolution=node main.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。
备注: 这不是特定于模块“打字稿”。我对“fs-extra”等其他模块也有同样的问题,它们以不同于大多数经典 NodeJS 模块的方式进行导出。
例如,模块“typescript”导出为export = ts。
我也找到了这个参考,但它对我没有多大帮助: https://www.typescriptlang.org/docs/handbook/modules.html
我的 nodeJs 版本是 13.3.0,我的 typescript 版本是 3.8.3 感谢您的帮助
【问题讨论】:
-
我不知道
typescript,但我认为您的问题与导入无关。如您所见ts.Node已解决,然后您正确导入typescript。根据TypeScript doc,你应该像这样定义私有字段:#test: string;并在构造函数中初始化它:constructor() { this.#test = 'zzz'; } -
您好,感谢您的回复。但是不,在 Typescript 中,您可以在构造函数之外声明和初始化属性。 Typescript 只会通过在 javascript 构造函数中设置它们的值来将它们转换为 javascript。
标签: node.js typescript import module