【发布时间】:2019-01-07 12:40:22
【问题描述】:
我正在尝试为使用 webpack 构建的库提供 typescript 类型定义,该库在全局窗口范围内注册自身。 该库是为通过 CDN 直接集成到浏览器而构建的。
我读到,定义Window 接口并将库添加到它应该可以解决问题,IDE 应该将我的定义与其全局Window 定义合并。
如果我将 *.d.ts 文件集成为 WebStrom 中的库,则此方法有效,但不适用于 VSCode。
这是一个简单的例子:my-lib.d.ts
export interface Window {
mylib: MyLib
}
export class MyLib {
foo(): string;
bar: number;
}
以及我想访问它的方式:consuming-script.js
/// <reference path="my-lib.d.ts"/>
const result = window.mylib.foo();
虽然导入参考有效,但(我可以访问 MyLib 类)IntelliSense 不会在 window 对象上显示附加属性 mylib。
在my-lib.d.ts 中使用全局声明是可行的,但这使得mylib 在全局范围内可用,而不是window 对象,这是别无选择的。
我做错了什么?我必须在 Visual Studio 代码设置中更改某些内容吗? - 我不敢相信在 WebStorm 中这么简单,在 VSCode 中这么麻烦,实际上是一个导入 Microsoft TS 类型定义的 Microsoft IDE。
【问题讨论】:
-
如果您在
d.ts中使用export,它将被视为一个模块。尝试不使用export,或者如果您有导入使用declare global { interface Windows { ... }}
标签: javascript typescript visual-studio-code definitelytyped typed