Typescript tsc找不到带有jest的名称“Set”

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

我有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 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
    =>我认为这是您的解决方案


那么您刚才添加了笑话,捆绑失败了?没有对package.json或.babelrc进行任何更改?是的,没有更改。我没有一个
.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"
    ]
}