typescript - 仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts)

标签 typescript jestjs typescript-typings tsconfig

My Jest setupTests 文件定义了一些全局标识符(如 global.sinon = sinon,但在环境声明中键入它们适用于所有文件,而不仅仅是 *.spec.ts 其中包含 setupTests 文件。以前我通过为 单独的 tsconfig.json 文件解决了这个>tests 目录,但如果测试文件和非测试文件位于同一目录中,那是不可能的。有没有办法让环境声明仅适用于特定的文件名模式?像这样:

declare module "*.spec.ts" {
    // declarations here
}

最佳答案

你不能通过这样做来解决这个问题:

declare module "*.spec.ts" {
  /* ... */
}

因为这就是您描述所有 *.spec.ts 文件的内容的方式,而不是它们执行的环境。

最好将源代码与测试分开,并使用两个单独的 tsconfig.json 文件。如果您必须混合使用源代码和测试,唯一想到的选择是在包含的文件外部创建一个声明文件,然后在每个测试文件中手动导入它。例如,您可以在项目的根目录中创建一个名为 environment 的目录,并将 test.d.ts 文件放在那里。

./environment/test.d.ts

declare const foo: string;

现在,每个依赖于全局 foo 的测试都需要引用 environment/test.d.ts

./path/to/foo.spec.ts

import '../environment/test';

console.log(foo);

这很麻烦,但我还没有找到更好的方法来为不同的文件提供不同的全局变量。通常,人们只是用他们可能拥有的所有全局变量(节点、浏览器、测试)污染了他们的全局命名空间。

关于typescript - 仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54742923/

相关文章:

reactjs - 使用 typescript 模板将 create-react-app 更新到 4.0 时出错

reactjs - 用 Jest 设置 ReactNative 的 NativeModules.RNDeviceInfo

angular - typescript :类型 X 缺少类型 Y 的以下属性 length、pop、push、concat 等 26 个。 [2740]

typescript - X 类型的参数不能分配给 Y 类型的参数。对象文字只能指定已知属性,并且 X 在类型 Y 中不存在

typescript - 应用函数名称和参数的函数类型

reactjs - TypeScript:将 React 组件导出为命名空间的一部分

typescript - Visual Studio Code 中 console.log 的快捷方式是什么

kendo-ui - Typescript with Kendo MVVM - 声明为可观察还是不可观察?

unit-testing - 类型错误 : Utils is not a constructor

javascript - 在 Jest 中调用 React 的 this.props.onClick(this) 时到底应该测试什么?