【问题标题】:VSCode specify type definitions on window scope [duplicate]VSCode在窗口范围内指定类型定义[重复]
【发布时间】: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


【解决方案1】:

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

一旦改成这个就可以了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多