2013-03-01 34 views
4

我想將我的app.js轉換爲app.ts,唯一缺少的是jquery.unobtrusive-ajax.js和/或jquery.validate.unobtrusive.js的.d文件。jquery.unobtrusive-ajax.d.ts/jquery.validate.unobtrusive.d.ts任何人?

當我構建和TSC編譯它工作正常,但在VS2012 WebEssentials抱怨:

var $form = $('#myform'); 
$.validator.unobtrusive.parse($form); 

錯誤:

The property 'unobtrusive' does not exist on value of type 'Validator' 

感謝

回答

4

如果你還沒有類型信息,並且編譯器不能推斷出類型,那麼就會出現問題。

雖然你從命令行得到輸出,但我仍然認爲它會給出錯誤。 Web Essentials強化了事物,這是工具背後的想法。

如果如果你有一個驗證的定義,你不能得到類型信息(檢查肯定打在GitHub上),你可以使用一個簡單的定義修正這個錯誤......

interface JQueryStatic { 
    validator: any; 
} 

,您可以使用此詭計聲明不會對此產生影響,然後只會丟失類型信息而不是所有驗證器。

這將失去在驗證器上鍵入,但會解決錯誤。

http://www.stevefenton.co.uk/Content/Blog/Date/201301/Blog/Complex-TypeScript-Definitions-Made-Easy/

+0

對不起 - 在我腦海中,我想第二行使用了第一行中選擇的表單!我會更新。 – Fenton 2013-03-02 21:03:26

+0

再次感謝,但我無法讓它工作。它抱怨重複的定義 - 從jquery.validate.d.ts我猜。我以另一種方式解決了它。看到我的答案。乾杯 – Jonesie 2013-03-03 06:30:50

+1

在這種情況下,您可能已經有了jQuery驗證定義,您可以按照我所述進行擴展。如果你通過強制轉換來實現,那麼當你添加一個定義時,你需要使用需要刪除的強制轉換代碼。 – Fenton 2013-03-03 09:03:03

0

摘自我解決了這個由鑄造任何:

(<any>$.validator).unobtrusive.parse($form); 

我喜歡打字稿,但使用的是由於缺乏定義文件而受到阻礙。我想這是一件小事--TSC可以正常工作 - 但如果Visual Studio會抱怨這樣的簡單事情,那麼這對很多人來說都是一個問題。

+1

-1我不認爲這是最好的解決方案,我不同意TS依賴於d.ts文件而受到阻礙。VS必須「抱怨」即使是簡單的事情,否則使用Typed系統有什麼用處?我認爲大多數使用TS的開發人員都會很高興地發現社區已經組裝了多少定義文件,並且可以快速而直接地找到添加或擴展這個庫的過程。 – JcFx 2013-03-04 10:20:57

+1

正確,這不是最好的解決方案,但缺少這個庫的.d文件絕對阻礙了我。對一些人來說,擴展它可能是快速和直接的,但我認爲打字稿足夠不同,使它不是微不足道的 - 這需要一些學習。 – Jonesie 2013-03-07 05:56:16

4

只是爲了說明我認爲史蒂夫已經說過的話,如果你download the d.ts from DefinitelyTyped,並打開文件,你會看到Validator接口(以及其他定義)。這是簡單的把它擴大:

interface Validator { 
    format(template: string, ...arguments: string[]): string; 
    form(): bool; 
    element(element: any): bool; 
    resetForm(): void; 
    showErrors(errors: any): void; 
    numberOfInvalids(): number; 
    setDefaults(defaults: ValidationOptions): void; 
    addMethod(name: string, method: (value: any, element: any, ...params: any[]) => any, message?: any): void; 
    addClassRules(rules: any): void; 
    addClassRules(name: string, rules: any): void; 

    // Just add the unobtrusive element to this (typed as `any` if you don't have time to do anything more) 
    unobtrusive:any; 
} 

延長JQueryJQueryStatic接口的其餘工作已經做了你,其他地方的文件。您不會在unobtrusive元素上獲得任何類型的善意,但至少會對所有其餘的Validator代碼進行類型檢查。