导入不带三斜杠指令的global.d.ts

时间:2018-08-23 19:54:32

标签: typescript es6-modules .d.ts

上下文:尝试让Mocha在我的存储库中对.ts文件运行测试。

问题:当我尝试在我的入门测试文件上运行mocha时:

mocha --compilers ts:ts-node/register ./src/server/backend/specs/index.spec.ts

我发现ts-node(根据ts-node's documentation)在我的"include": ["./src/**/*"]文件中看不到tsconfig.json。这意味着我的Mocha测试看不到./src/types/global.d.ts,其中包括type Omit<T, K>的定义(还有其他内容)。我经过测试的模块希望使用Omit,这会导致编译器错误Cannot find name 'Omit'

好-我想-我将使用三斜杠指令将global.d.ts导入index.spec.ts中。因此,将/// <reference path="../../../types/global.d.ts" />添加到index.spec.ts的顶部,并从ts-lint:<reference> is not allowed, use imports (no-reference)得到了投诉。 (对我来说是新闻-三斜杠指令是now deprecated,建议“改为使用ES6样式的导入”。)

好的,所以我很天真地用import "../../../types/global";替换了三斜杠指令,但是tsc当然抱怨global.d.ts不是模块(当然不是)。确实,我使用global.d.ts声明了不是模块的东西,所以我很困惑应该如何导入它-并且我不想从global.d.ts导出任何东西,因为我的理解是然后它将在main-non-mocha上下文中停止产生其全球可读性。

当我仅使用ts-lint中关闭无引用规则的三斜杠指令时,它可以很好地工作,但是我想更好地了解这里的最新模式/思想。谢谢任何人!

1 个答案:

答案 0 :(得分:1)

Google finds an issue about this,建议将全局声明文件直接添加到tsconfig.json中的项目中。如果是ts-node,则必须使用--files选项。如果您不想这样做,那么没有很好的选择,因此我想说,抑制掉毛警告或禁用no-reference规则是正确的选择。您可以考虑针对tslint发行新刊物,以进一步讨论这种情况。