首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用“新建”和“表达式类型记录”

不能使用“新建”和“表达式类型记录”
EN

Stack Overflow用户
提问于 2016-12-07 12:16:58
回答 2查看 53.2K关注 0票数 36
代码语言:javascript
复制
interface Window {
    AudioContext: AudioContext;
    webkitAudioContext: Function
}

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

最后一行是给我这个错误,

不能对类型没有调用或构造签名的表达式使用“new”。

我怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-07 12:41:21

问题在于编译器将contextClass变量视为AudioContext的实例,而实际上它只是AudioContext的构造函数。

您可以简单地使用any,编译器将允许您使用new

代码语言:javascript
复制
let contextClass : any = window.AudioContext || window.webkitAudioContext;
let context: AudioContext = new contextClass();

另一种选择是引入一个Constructable<T>接口,使您能够使用这些类型的new

代码语言:javascript
复制
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();
票数 42
EN

Stack Overflow用户

发布于 2016-12-07 12:29:25

你不能建立一个新的实例。new instanceofAudioContext()不是一件有效的事情。

您的接口与您试图使用的API不匹配。在浏览器中,window.AudioContext不是AudioContext的一个实例。它是类定义方法,typeof AudioContextFunction也会遇到同样的问题。

如果你还想保持你的界面。尝尝这个

代码语言:javascript
复制
interface Window {
    AudioContext: typeof AudioContext;
    webkitAudioContext: typeof AudioContext
}

declare var window: Window;

var AudioContextDecl = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();

或者如果你不想要界面,

代码语言:javascript
复制
var AudioContextDecl = <typeof AudioContext>(window.AudioContext || window.webkitAudioContext);
var audioCtx = new AudioContext();

甚至只需使用any。一切都转到了同一件事上。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41017287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档