2012-12-20 19 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