这个可能非常简单,但我想弄清楚它会发疯。
我在外部 index.ts 文件中有一个非常简单的自执行函数,需要在 window 对象上注册一个全局变量。我想像这样分配它:
(() => {
window.myCustomGlobal = new MyCustomGlobal();
})()
Run Code Online (Sandbox Code Playgroud)
我在 index.ts 旁边创建了 index.d.ts:
import { MyCustomGlobal} from './classes';
declare interface Window {
myCustomGlobal: MyCustomGlobal;
}
Run Code Online (Sandbox Code Playgroud)
上面没有错误,一切看起来都很好。应用程序编译正常。
但是,在 IDE 中,我收到一个错误:
ts2339: Property 'myCustomGlobal' does not exist on type 'Window'
我一生都无法弄清楚究竟是什么让 Typescript“弄清楚”要包含什么 .d.ts 文件。在某些库中,将 .d.ts 文件与 .js 文件放在一起会导致它被拾取,并且工作正常。事实上,我使用了与上面完全相同的接口和一个全局第三方库,效果很好;似乎我的 IDE 无法接收它。
我已经尝试添加index.d.ts到tsconfig.jsoninclude以及files没有运气。
有人可以解释一下,就像对孩子一样,是什么导致 TS 拿起声明文件?有时我觉得我明白了,然后在像这样愚蠢的简单例子中,我觉得自己像个白痴。
谢谢
这里可能有两个问题:
1.) 如果要扩充全局Window接口,则必须在全局范围内进行。您可以删除所有import/export关键字以使包含文件成为非模块/脚本。或者您declare global在模块中使用将包含在其中的所有内容标记为全局声明。像这样:
import { MyCustomGlobal} from './classes';
declare global {
interface Window {
myCustomGlobal: MyCustomGlobal;
}
}
Run Code Online (Sandbox Code Playgroud)
2.) 同名文件,只是它们的.ts/.d.ts扩展名不同,不起作用。引用文档:
请注意,编译器不包含可能输出的文件;例如,如果输入包含 index.ts,则排除 index.d.ts 和 index.js。通常,不建议将仅扩展名不同的文件放在一起。
所以一定要重命名index.d.ts为类似的东西global.d.ts,这样编译器不会只选择index.ts. global.d.ts如果将文件放置在 TS 项目中的某个位置,并且未指定tsconfig.jsonif"files"和"include"config 选项,则该文件将自动包含在内。
| 归档时间: |
|
| 查看次数: |
7601 次 |
| 最近记录: |