仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts)
Adding TypeScript ambient declarations only to specific files (like *.spec.ts)
My Jest setupTests
文件定义了一些全局标识符(如 global.sinon = sinon
,但在环境声明中键入它们适用于所有文件,而不仅仅是 *.spec.ts
其中 setupTests
文件被包含在内。以前我已经通过为 tests
目录创建一个单独的 tsconfig.json
文件来解决这个问题,但是如果测试和非测试文件位于同一目录中,这是不可能的. 有没有办法让环境声明只适用于特定的文件名模式?像这样的东西:
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);
这很麻烦,但我还没有找到更好的方法来为不同的文件提供不同的全局变量。通常,人们只是用他们可能拥有的所有全局变量(节点、浏览器、测试)污染了他们的全局命名空间。
My Jest setupTests
文件定义了一些全局标识符(如 global.sinon = sinon
,但在环境声明中键入它们适用于所有文件,而不仅仅是 *.spec.ts
其中 setupTests
文件被包含在内。以前我已经通过为 tests
目录创建一个单独的 tsconfig.json
文件来解决这个问题,但是如果测试和非测试文件位于同一目录中,这是不可能的. 有没有办法让环境声明只适用于特定的文件名模式?像这样的东西:
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);
这很麻烦,但我还没有找到更好的方法来为不同的文件提供不同的全局变量。通常,人们只是用他们可能拥有的所有全局变量(节点、浏览器、测试)污染了他们的全局命名空间。