我正在尝试为使用webpack构建的库提供打字稿类型定义,该库将自身注册在全局窗口范围内。 该库旨在通过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不会在mylib
对象上显示附加属性window
。
在my-lib.d.ts
中使用全局声明是可行的,但是这使mylib
在全局范围内可用,而不是window
对象,这是不可替代的。
我在做什么错?我在Visual Studio代码设置中是否需要更改某些内容? -我不敢相信WebStorm这么简单,VSCode这么麻烦,实际上是Microsoft IDE导入Microsoft TS类型定义。
答案 0 :(得分:0)
Titian Cernicova-Dragomir是正确的,重要的部分是在全球范围内定义接口。
一旦更改为有效,就可以使用
declare global {
interface Window {
mylib: MyLib
}
}
export class MyLib {
foo(): string;
bar: number;
}