tsc找不到带有笑话的名称`Set`

时间:2019-08-22 16:06:48

标签: typescript jestjs babel

我有打字稿编译设置,并且编译效果很好。

然后我将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 中查找与我的问题不同(并且可接受的答案适用于该问题)。

2 个答案:

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