VSCode在窗口范围内指定类型定义

时间:2019-01-07 12:40:22

标签: javascript typescript visual-studio-code definitelytyped typed

我正在尝试为使用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类型定义。

1 个答案:

答案 0 :(得分:0)

Titian Cernicova-Dragomir是正确的,重要的部分是在全球范围内定义接口。

一旦更改为有效,就可以使用

declare global {
    interface Window {
        mylib: MyLib
    }
}
export class MyLib {
    foo(): string;
    bar: number;
}