声明窗口的打字稿定义的正确方法

时间:2016-12-09 08:13:49

标签: typescript

我试图在窗口对象中定义新类型,如bool continueOnCapturedContext。我已经创建了一个名为 window.d.ts 的单独文件,在里面我添加了以下代码,

webkitAudioContext

从另一个模块我导入定义文件,如下所示

interface Window {
    AudioContext: Constructable;
    webkitAudioContext: Constructable;
}

interface Constructable {
    new();
}

以上两行效果很好。

如果我更改下面的定义文件,

/// <reference path="./window.d.ts" />

let contextClass = window.AudioContext || window.webkitAudioContext;
let context = new contextClass();

然后它无法正常工作。定义窗口定义的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

AudioContextwebkitAudioContext here已存在社区书面定义。 如果您不熟悉@types - 您可以阅读更多内容here,很快 - 它包含许多库的许多定义(您甚至可以使用JQueryPromise作为类型)。<登记/> 此外,您还可以使用自定义定义创建global.d.ts文件good practice,其中包含以下代码:

declare var myCustomLib: any;

然后你应该将global.d.ts添加到tsconfig.json,这样编译器就会知道你的定义:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "outDir": "./build"
  },
  "exclude": ["node_modules"],
  "files": ["./src/globals"]
}

如果您遇到尝试访问弃用功能的情况,可以通过(... as any)构造访问它们,如下所示:

let Ctx = window.AudioContext || (window as any).webkitAudioContext;

我希望其中一些技巧可以帮到你。