4

app.jsをapp.tsに変換しようとしていますが、不足しているのはjquery.unobtrusive-ajax.jsおよび/またはjquery.validate.unobtrusive.jsの.dファイルだけです。

tscを使用してビルドおよびコンパイルすると、正常に動作しますが、VS2012のWebEssentialsは次のことについて不平を言います。

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

エラー:

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

ありがとう

4

3 に答える 3

4

型情報を取得しておらず、コンパイラが型を推測できない場合は、問題が発生します。

コマンドラインから出力を取得していますが、それでもエラーが発生することが予想されます。Web Essentialsは、ツールの背後にある考え方である、物事をより強力に実施します。

タイプ情報を取得できない場合(GitHubでDefinitely Typedをチェック)、簡略化された定義を使用してエラーを修正できます...

interface JQueryStatic {
    validator: any;
}

バリデーターの定義がある場合は、このトリックを使用して、それに対して目立たないことを宣言できます。これにより、バリデーターのすべてではなく、タイプ情報のみが欠落します。

これにより、バリデーターでの入力が失われますが、エラーは修正されます。

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

于 2013-03-02T10:04:04.567 に答える
4

スティーブがすでに言ったことを説明するために、DefinitelyTypedからd.tsをダウンロードしてファイルを開くと、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; 
}

JQueryおよびインターフェースを拡張する残りの作業はJQueryStatic、ファイルの他の場所ですでに実行されています。要素に型付きの良さはありませんunobtrusiveが、少なくとも残りのValidatorコードはすべて型チェックされます。

于 2013-03-04T09:55:21.967 に答える
0

私はこれを次のいずれかにキャストすることで解決しました:

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

私はtypescriptが好きですが、定義ファイルがないために使用が妨げられています。これは小さなことだと思います-tscは正常に機能します-しかし、Visual Studioがこのような単純なことについて不平を言う場合、多くの人にとって問題になるでしょう。

于 2013-03-03T06:33:11.940 に答える