我试图在窗口对象中定义新类型,如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();
然后它无法正常工作。定义窗口定义的正确方法是什么?
答案 0 :(得分:2)
AudioContext
和webkitAudioContext
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;
我希望其中一些技巧可以帮到你。