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