【发布时间】:2012-12-08 11:13:28
【问题描述】:
我正在制作一个 jquery 小部件,其中 widget factory 在 typescript 中输入。如何在无需编写 .d.ts 的情况下提供良好的智能感知?
例如:
/*mywidget.ts*/
$.widget("ui.mywidget", {
options: {
myoption: ""
},
doSomething: function () {
this._hasDoSomething = true;
/*do doSomething*/
},
hasDoSomething: function (): bool {
return <bool>this._hasDoSomething;
}
});
/*mywidget.d.ts*/
interface MyWidgetOptions {
myoption: string;
}
interface MyWidget extends Widget, MyWidgetOptions {}
interface NLIB {
mywidget: MyWidget;
}
interface JQuery {
mywidget(): JQuery;
mywidget(methodName: string): JQuery;
mywidget(options: MyWidgetOptions): JQuery;
mywidget(optionLiteral: string, optionName: string): any;
mywidget(optionLiteral: string, options: MyWidgetOptions): any;
mywidget(optionLiteral: string, optionName: string, optionValue: any): JQuery;
}
interface JQueryStatic {
nlib: NLIB;
}
/// <reference path="teste.d.ts" />
$(".teste").mywidget({
myoption: "asdadds"
});
为每个插件编写 .d.ts 太无聊了。有什么选择吗?
注意: 如果我不包含 mywidget.d.ts,则此代码将无法编译,并且我将没有智能感知:
///<reference path="path/to/jqueryui-1.9.d.ts"/>
$(".teste").mywidget({
myoption: "asdadds"
});
/* 编译器输出: ...“JQuery”类型的值上不存在属性“mywidget” */
【问题讨论】:
-
我相信我分享这个问题的动机。我喜欢 typescript,但我希望它对 typescript-“native” DOM 操作库有一个很好的答案,可以扩展它以构建 typescript-native UI 小部件(如自动完成)。我明白为什么 JQuery UI Widget Factory(我也很喜欢,pre-typescript)在这里不匹配,但是还有什么更适合打字的解决方案呢?
标签: jquery-ui typescript jquery-widgets