Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅将TypeScript环境声明添加到特定文件(如*.spec.ts)_Typescript_Jestjs_Typescript Typings_Tsconfig - Fatal编程技术网

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

仅将TypeScript环境声明添加到特定文件(如*.spec.ts),typescript,jestjs,typescript-typings,tsconfig,Typescript,Jestjs,Typescript Typings,Tsconfig,我的JestsetupTests文件定义了许多全局标识符(类似于global.sinon=sinon,但在环境声明中键入它们适用于所有文件,而不仅仅是setupTests文件所在的*.spec.ts。之前,我已经通过为tests目录使用一个单独的tsconfig.json文件解决了这个问题,但如果测试d个非测试文件位于同一目录中。是否有任何方法使环境声明仅适用于特定的文件名模式?类似于以下内容: declare module "*.spec.ts" { // declarations h

我的Jest
setupTests
文件定义了许多全局标识符(类似于
global.sinon=sinon
,但在环境声明中键入它们适用于所有文件,而不仅仅是
setupTests
文件所在的
*.spec.ts
。之前,我已经通过为
tests
目录使用一个单独的
tsconfig.json
文件解决了这个问题,但如果测试d个非测试文件位于同一目录中。是否有任何方法使环境声明仅适用于特定的文件名模式?类似于以下内容:

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

执行以下操作无法解决此问题:

declare module "*.spec.ts" {
  /* ... */
}
因为这是描述所有
*.spec.ts
文件内容的方式,而不是它们执行的环境

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

/environment/test.d.ts

declare const foo: string;
import '../environment/test';

console.log(foo);
现在,依赖于全局
foo
的每个测试都需要引用
环境/test.d.ts

/path/to/foo.spec.ts

declare const foo: string;
import '../environment/test';

console.log(foo);

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

您难道不能仍然有两个tsconfig并在其中使用
包含
排除
来包含/排除适当的文件吗?