使用类装饰器(节点)时,需要relect-metadata填充程序

时间:2018-08-08 15:59:58

标签: javascript node.js angular typescript

使用swagger代码生成了一个Typescript-angular项目,然后通过运行npm install构建它。然后,我编写了一个测试类,并运行tsc将其编译为javascript,以便可以使用node运行测试类。当我尝试运行节点testing.js命令时,收到错误消息“使用类装饰器时需要reflect-metadata shim”。由于这并不意味着它是一个完整的应用程序,因此我没有index.ts或main.ts文件,因此遇到的其他解决方案(例如导入)也无法正常工作。当我运行npm list时,我看到我的节点模块中确实有反射元数据。这是我的tsconfig文件:

{
"compilerOptions": {
    "types": ["reflect-metadata"],
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "noImplicitAny": false,
    "suppressImplicitAnyIndexErrors": true,
    "target": "es2015",
    "module": "commonjs",
    "moduleResolution": "node",
    "removeComments": true,
    "sourceMap": true,
    "outDir": "./dist",
    "noLib": false,
    "declaration": true,
    "lib": [ "es6", "dom" ]
},
"exclude": [
    "node_modules",
    "dist"
],
"filesGlob": [
    "./model/*.ts",
    "./api/*.ts"
]
}

有节点时,有没有办法从节点运行js文件?

1 个答案:

答案 0 :(得分:0)

所以看来我找到了可行的解决方案。我加了

import "reflect-metadata" 

到打字稿文件的第一行(它必须是第一行,否则在导入之前它会使用修饰符)。