我有打字稿编译设置,并且编译效果很好。
然后我将jest
(测试框架)安装为devDependency
。这仅是为了开发(因此,它是devDependency
的原因),并且不应成为已编译软件包的一部分。
编译现在会导致以下错误:
node_modules/@types/babel__template/index.d.ts:16:28 - error TS2583: Cannot find name 'Set'. Do you need to change your target library? Try changing the `lib` compiler option to es2015 or later.
16 placeholderWhitelist?: Set<string>;
此错误可以解决,如果可以,如何解决?添加"lib": ["es6"]
是不可接受的解决方案,因为jest的实现细节不要求我像这样修改编译器选项。另请注意,jest
运行完美。如果没有其他解决方案,那就是可以接受的答案。
为什么tsc
会编译devDependencies
,我该如何停止呢?我不明白为什么我突然要担心嵌套的通天塔devDependency
会影响我的编译。
编辑:tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"rootDir": "./src",
"outDir": "./build",
"strict": true,
"esModuleInterop": true
},
"include": [
"src/**/*"
],
"exclude": [
"/src/**/?(*.)test.ts"
]
}
注意:这不是node_modules/@types/babel _template/index.d.ts :16:28 - error TS2583: Cannot find name 'Set'
的重复这个问题在问为什么tsc在node_modules
中查找与我的问题不同(并且可接受的答案适用于该问题)。
答案 0 :(得分:1)
为什么tsc会编译devDependencies?如何停止它?我不明白为什么我突然要担心嵌套的babel devDependency影响我的编译。
默认情况下,tsc
加载node_modules/@types/**/*
中的所有声明,在您的情况下,该声明包括依赖于>= es2015
的类型声明。如果该类型声明来自devDependency
,则tsc
将包含它。这就是tsc
正在编译与devDependency
相关联的内容的原因。
如果升级到es2015
不是有效的解决方案,那么您也可以尝试忽略依赖于它的特定类型声明。
从TypeScript documentation on @types:
默认情况下,所有可见的“ @types”软件包都包含在您的编译中...指定
"types": []
以禁用自动包含@types
软件包。
答案 1 :(得分:1)
考虑您的tsconfig
,您可以:
将lib
添加到您的compilerOptions
中,但是您不想因为测试库而影响项目,我明白这一点;
确保测试使用另一个tsconfig
之类的tsconfig.test.json
,其中包含需要的lib
=>我认为这是您的解决方案;