Typescript tsc找不到带有jest的名称“Set”
我有typescript编译设置,编译工作非常完美 然后我将Typescript tsc找不到带有jest的名称“Set”,typescript,jestjs,babeljs,Typescript,Jestjs,Babeljs,我有typescript编译设置,编译工作非常完美 然后我将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
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>;
注意:这是不是的副本 这个问题是问为什么tsc在查看
node_modules
,这与我的问题不同(公认的答案是针对该问题的)
tsc为什么要编译devdependency?我该如何阻止它?我不明白为什么我要突然担心嵌套的babel devDependency会影响我的编译
默认情况下,tsc
加载node_modules/@types/***
中的所有声明,在您的情况下,该声明包括一个依赖于=es2015
的类型声明。如果该类型声明来自devDependency
,则tsc
将包括它。这就是为什么tsc
正在编译与devDependency
相关的东西
如果升级到es2015
不是有效的解决方案,那么您也可以尝试忽略依赖它的特定类型声明
从类型脚本:
默认情况下,编译中包含所有可见的“@types”包。。。指定“类型”:[]
以禁用自动包含@types
包
考虑到您的
tsconfig
,您可以:
- 将
添加到您的lib
编译器选项中,但我明白,您不希望因为测试库而影响您的项目
- 确保您的测试使用另一个
,比如tsconfig
,它具有所需的tsconfig.test.json
=>我认为这是您的解决方案lib
.babelrc
,但是错误来自babel,大概是jest在使用它。请您发布您的tsconfig.json
?是否有专门编译devdependency的原因?它们应该是用于开发的,而不是构建包的一部分,对吗?@davidcalanan问题并不在于devdependency
;相反,是@types
中的babel\u模板/index.d.ts
。。。手动配置嵌套依赖项似乎不对,它们应该对我隐藏,不是吗?对于TypeScript团队来说,这是一个合理的要求。TypeScript GitHub存储库中存在一个问题,即手动配置不需要的和可能嵌套的@types
在这里的麻烦:我认为最好的选择是有一个单独的tsconfig.test.json
,它扩展了tsconfig.json
,并添加了“types”:[“jest”]
我会尝试一下,但是jest
与原始tsconfig.json
运行良好,我的正常编译tsc
中断。我本以为会是另一种情况。在tsconfig.test.json中进行更改仍然会影响我的项目,对吗?因为我的测试从我的项目中导入代码。好吧,我明白了,所以我认为在你的“正常”tsconfig
中,你可能必须忽略babel_u_u模板
类型,并且不要在你的“测试”tsconfig
中忽略它。是的,但我更愿意避免。我不明白为什么devDependency的嵌套依赖项需要我更新我的产品编译。在dev和tests之间使用不同的tsconfig
会影响您的项目是,因为存在导致不一致的配置差异。我看到的唯一解决方案是使用一个旧版本的jest
,它完全是es5
。
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"rootDir": "./src",
"outDir": "./build",
"strict": true,
"esModuleInterop": true
},
"include": [
"src/**/*"
],
"exclude": [
"/src/**/?(*.)test.ts"
]
}