interface Window {
AudioContext: AudioContext;
webkitAudioContext: Function
}
let contextClass = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();
Run Code Online (Sandbox Code Playgroud)
最后一行是给我这个错误,
不能对类型缺少调用或构造签名的表达式使用"new"
我该如何解决这个问题?
hai*_*770 18
问题是编译器将contextClass变量视为实例,AudioContext而实际上它只是一个构造函数AudioContext.
你可以简单地使用any,编译器会让你new:
let contextClass : any = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();
Run Code Online (Sandbox Code Playgroud)
另一种选择是引入一个Constructable<T>可以让你new提升这些类型的界面:
interface Constructable<T> {
new() : T;
}
interface Window
{
AudioContext: Constructable<AudioContext>;
webkitAudioContext: Constructable<AudioContext>
}
let contextClass = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();
Run Code Online (Sandbox Code Playgroud)
你不能新建一个实例.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();
Run Code Online (Sandbox Code Playgroud)
或者如果你不想要界面,
var AudioContextDecl = <typeof AudioContext>(window.AudioContext || window.webkitAudioContext);
var audioCtx = new AudioContext();
Run Code Online (Sandbox Code Playgroud)
甚至只是使用any.这一切都转化为同样的事情.
| 归档时间: |
|
| 查看次数: |
26459 次 |
| 最近记录: |