1

使用现有的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 定义的限制?

4

1 回答 1

3

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

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

interface Thing {
    Event: CallableOrNewable;
}

var x: Thing;
new x.Event(''); // OK
x.Event(''); // Also OK
于 2013-05-02T21:38:23.850 回答