2012-12-20 23 views
6

Tôi đang tạo một tiện ích jquery với widget factory được nhập vào bản ghi. Làm thế nào để cung cấp một intellisense tốt mà không cần phải viết .d.ts?Cách tốt nhất để làm jquery ui với các loại

ví dụ:

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

Quá nhàm chán để viết .d.ts cho mỗi plugin. Bất kỳ thay thế nào?

lưu ý: Nếu tôi không bao gồm mywidget.d.ts mã này sẽ không biên dịch và tôi sẽ không có IntelliSense:

///<reference path="path/to/jqueryui-1.9.d.ts"/> 
$(".teste").mywidget({ 
    myoption: "asdadds" 
}); 

/* biên dịch ra: ... bất động sản 'mywidget' không tồn tại trên giá trị của loại 'JQuery' */

+1

Tôi tin rằng tôi chia sẻ động lực cho câu hỏi này. Tôi ** yêu ** bản thảo, nhưng tôi muốn nó có một câu trả lời hay cho một thư viện thao tác DOM "bản địa" có thể được mở rộng để xây dựng các tiện ích UI kiểu bản địa (như tự động hoàn thành). Tôi hiểu tại sao JQuery UI Widget Factory (mà tôi cũng yêu thích, pre-typescript) là một kết hợp không tốt ở đây, nhưng thay vào đó, giải pháp thay thế nhiều loại có thể là gì? –

Trả lời

10

Dự án DefinitelyTyped trên GitHub cung cấp tệp định nghĩa cho hầu hết các thư viện JavaScript phổ biến.

Tất cả bạn cần làm là tải về các tập tin bạn cần và tham khảo nó trong mã của bạn như:

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

Nếu tôi không bao gồm mywidget.d.ts, mã này sẽ không biên dịch và tôi sẽ không có intellisense: \t /// \t $ (". Teste"). Mywidget ({ \t \t myoption: "asdadds" \t}); /* trình biên dịch: ... thuộc tính 'mywidget' không tồn tại trên giá trị của loại 'JQuery' */ –

+0

+1 cho liên kết. – Olaf

+0

Điều này sẽ được đánh dấu là câu trả lời! – Ahsan

Các vấn đề liên quan