2012-12-20 82 views
6

我正在制作一个jQuery小部件,打字稿中输入了widget factory。如何提供良好的智能感知,而无需编写.d.ts?使用打字稿制作jquery ui的最佳方式

例如:

/*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" 
}); 

/* 编译出来: ...属性'mywidget'类型'jQuery'的值不存在 */

+1

我相信我分享这个问题的动机。我**爱**打字稿,但我希望它有一个打字稿 - “本机”DOM操作库的一个很好的答案,可以扩展到构建打字稿本机用户界面小部件(如自动完成)。我理解为什么JQuery UI Widget Factory(我也喜欢,预打字)在这里是一个糟糕的匹配,但是更多的typecripty解决方案可能取而代之吗? –

回答

10

GitHub上的DefinitelyTyped项目为大多数流行的JavaScript库提供了定义文件。

所有你需要做的是下载您需要的文件,并在你的代码相似的参考吧:

///<reference path="path/to/jqueryui-1.9.d.ts"/> 
+0

如果我不包含mywidget.d.ts,这段代码将不会编译,我将不会有intellisense: \t /// (“。teste”)。mywidget({ \t \t myoption:“asdadds” \t}); /* 编译器输出: ...属性'mywidget'不存在于类型'JQuery'的值 */ –

+0

+1的链接。 – Olaf

+0

这应该被标记为答案! – Ahsan