如何在jQuery.Event()中使用'new'

时间:2013-05-02 21:27:56

标签: typescript

使用现有的DefinitelyTyped jquery.d.ts声明,我无法执行此操作:

/// <reference path="../Scripts/typings/jquery/jquery.d.ts" />
declare var firstEvent;
var newEvent = new jQuery.Event(firstEvent);

但是这会产生编译错误:

testing.ts(3,19): new expression only valid on constructors

根据jquery.d.ts,这是有道理的,因为jQuery.Event被定义为一个函数而不是一个类型。

我可以使用强制转换强制它:

/// <reference path="../Scripts/typings/jquery/jquery.d.ts" />
declare var firstEvent;
var newEvent = new <any>jQuery.Event(firstEvent);

但是大锤感觉不对劲。

这是TypeScript声明的限制还是jquery.d.ts定义中的限制?

1 个答案:

答案 0 :(得分:3)

这只是jQuery定义文件中的一个缺点。你可以表示像这样的可调用或可新的东西(为了清楚起见,这里使用显式接口编写;你也可以使用类型文字):

interface CallableOrNewable {
    (arg: string);
    new (arg: string);
}

interface Thing {
    Event: CallableOrNewable;
}

var x: Thing;
new x.Event(''); // OK
x.Event(''); // Also OK