使用tsyringe @injectable时遇TS1219装饰器实验支持错误,求解决方案
问题根源
你遇到的编译错误核心原因是:
- 测试命令通过
TS_NODE_PROJECT="tsconfig.testing.json"指定了ts-node使用的编译配置,但这个配置文件未开启装饰器相关的实验性支持,而你的repo.ts使用了@injectable()装饰器,导致ts-node编译TS文件时触发错误。 - 你添加的
jsconfig.json不会生效,因为ts-node在通过TS_NODE_PROJECT指定配置文件时,会优先读取tsconfig,忽略jsconfig。 - 测试文件改成TS后缀正常,是因为此时编译流程会默认使用(或正确加载)包含装饰器配置的
tsconfig.json,而非测试专用的配置文件。
解决方案
修改tsconfig.testing.json,补充装饰器相关配置,并调整文件匹配规则:
{ "compilerOptions": { "module": "commonjs", "target": "es6", "experimentalDecorators": true, // 开启装饰器支持 "emitDecoratorMetadata": true, // 开启元数据支持(tsyringe依赖此配置) "strict": false }, "include": ["src/**/*.ts", "src/**/*.test.js"] // 包含业务TS文件和测试JS文件 }
验证
重新执行测试命令:
TS_NODE_PROJECT="tsconfig.testing.json" mocha -r ts-node/register src/**/*.test.js
此时ts-node会用更新后的配置编译repo.ts,装饰器相关的错误会消失,测试可以正常运行。
内容的提问来源于stack exchange,提问作者Last_Node_Standing
相关产品推荐
相关产品推荐

