打字稿:.d.ts文件无法识别

时间:2020-01-14 06:13:24

标签: typescript

这可能非常简单,但是我很努力地试图弄清楚。

我在外部index.ts文件中有一个非常简单的自执行函数,该文件需要在window对象上注册一个全局变量。我想这样分配它:

(() => {
  window.myCustomGlobal = new MyCustomGlobal();
})()

我与index.ts一起创建了index.d.ts:

import { MyCustomGlobal} from './classes';

declare interface Window {
  myCustomGlobal: MyCustomGlobal;
}

上面没有错误,一切看起来不错。该应用程序可以正常编译。

但是,在IDE中,出现错误: ts2339: Property 'myCustomGlobal' does not exist on type 'Window'

我一辈子都无法弄清楚究竟是什么使Typescript“弄清楚”要包括的.d.ts文件。在某些库中,将.d.ts文件与.js文件放在一起会导致它被拾取,并且工作正常。实际上,我将与上述完全相同的接口与全局第三方lib一起使用,并且效果很好。好像我的IDE不会接它。

我尝试将index.d.tsinclude的{​​{1}}添加到tsconfig.json中,但是没有运气。

有人能像孩子一样解释什么导致TS提取声明文件吗?有时候我觉得自己懂了,然后在像这样的愚蠢简单例子中,我觉得自己像个白痴。

谢谢

1 个答案:

答案 0 :(得分:5)

这里可能有两个问题:

1。)如果要扩展全局Window接口,则必须在全局范围内进行。您可以删除所有import / export关键字,以使包含文件成为非模块/脚本。或者,您可以在模块中使用declare global,将包装在其中的所有内容标记为全局声明。像这样:

declare global {
  interface Window {
    myCustomGlobal: MyCustomGlobal;
  }
}

2。)同名文件,仅扩展名.ts / .d.ts不起作用。引用docs

请注意,编译器不包含可能作为输出的文件;例如如果输入包含index.ts,则排除index.d.ts和index.js。通常,不建议让文件的扩展名彼此相邻。

因此,请确保将index.d.ts重命名为类似global.d.ts的名称,以便编译器不仅选择index.ts。如果将global.d.ts文件放在由tsconfig.json标记的TS项目中的某个位置,并且{ 如果"files""include"配置选项未指定。

相关问题