interface Window {
AudioContext: AudioContext;
webkitAudioContext: Function
}
let contextClass = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();最后一行是给我这个错误,
不能对类型没有调用或构造签名的表达式使用“new”。
我怎么解决这个问题?
发布于 2016-12-07 12:41:21
问题在于编译器将contextClass变量视为AudioContext的实例,而实际上它只是AudioContext的构造函数。
您可以简单地使用any,编译器将允许您使用new:
let contextClass : any = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();另一种选择是引入一个Constructable<T>接口,使您能够使用这些类型的new:
interface Constructable<T> {
new(...args: any) : T;
}
interface Window
{
AudioContext: Constructable<AudioContext>;
webkitAudioContext: Constructable<AudioContext>
}
let contextClass = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();发布于 2016-12-07 12:29:25
你不能建立一个新的实例。new instanceofAudioContext()不是一件有效的事情。
您的接口与您试图使用的API不匹配。在浏览器中,window.AudioContext不是AudioContext的一个实例。它是类定义方法,typeof AudioContext。Function也会遇到同样的问题。
如果你还想保持你的界面。尝尝这个
interface Window {
AudioContext: typeof AudioContext;
webkitAudioContext: typeof AudioContext
}
declare var window: Window;
var AudioContextDecl = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();或者如果你不想要界面,
var AudioContextDecl = <typeof AudioContext>(window.AudioContext || window.webkitAudioContext);
var audioCtx = new AudioContext();甚至只需使用any。一切都转到了同一件事上。
https://stackoverflow.com/questions/41017287
复制相似问题