Typescriptを使用しているときに、「タイプJQueryにプロパティが存在しません」という構文エラーを停止するにはどうすればよいですか?


80

アプリケーションでjQueryを1行だけ使用しています。

$("div.printArea").printArea();

しかし、これは私にTypescriptエラーを与えています:

プロパティ 'printArea'はタイプJQueryに存在しませんか?

このエラーの表示を停止する方法を教えてもらえますか?

回答:


188

<any>jqueryタイピングにキャストまたは拡張して、独自のメソッドを追加できます。

 (<any>$("div.printArea")).printArea();

//または独自のカスタムメソッドを追加します(これがカスタムプラグインの一部として自分で追加されたと仮定します)

interface JQuery {
    printArea():void;
}

私に:Error:(44, 23) TS2339: Property 'printArea' does not exist on type 'ElementFinder'.
user47376 2016

interface JQuery外部モジュールでその方法を試し、関数パラメーターをJQueryタイプとして定義し、それを別のファイルから呼び出そうとすると、TypeScriptは、無関係なJQueryという名前の2つのタイプがあると文句を言います。
Sam Rueby 2018

インターフェイスの宣言はうまく機能しているようです。また、どこでも<any>にキャストするよりもはるかにクリーンです
デコードさ

これは私にとってはうまくいきませんでしたが、最終的に私はstackoverflow.com/questions/30960386/…に出くわしdeclare global { ... }、インターフェース宣言の周りに必要であることに気づきました。
ジェームス・ホプキン


12

あなたはそれをにキャストすることができます

(<any>$('.selector') ).function();

例:jqueryを使用して日付ピッカーを初期化する

(<any>$('.datepicker') ).datepicker();

3

あなたの例では、これを追加します:

interface JQuery{
    printArea():void;
}

編集:おっと、basaratは以下で正しいです。なぜコンパイルされていると思ったのかわかりませんが、この回答を更新しました。


いいえ。彼はオブジェクトを$でラップしています。もう静的な$ではありません
basarat 2014

うーん、確かに?私はそれをプロジェクトでテストしましたが、うまくいきました。
AlexB 2014

うん。あなたのケース$.inviewport(el)Opsケース$('selector').printArea
basarat 2014

申し訳ありませんが、口論するつもりはありませんが、私のコードは私のために機能します。問題はコードをコンパイルすることに関するようです、それで私のコードがコンパイルされるならば、それの問題は何ですか?printArea()を使用した2番目の例も同様に機能することに注意してください。
AlexB 2014

$('selector').printAreaコンパイルしますか?私はそうは思いません。$.printAreaただし、コンパイルされます。あなたはとても礼儀正しいので、犯罪は取られたり意図されたりしていません:)
basarat 2014

2

printAreaはjQueryプラグインであるため、jquery.d.tsには含まれていません。

jquery.printArea.ts定義ファイルを作成する必要があります。

プラグインの完全な定義ファイルを作成する場合は、DefinitelyTypedに送信することをお勧めします。


また、tsconfig.jsonも正しく設定されていることを確認してください。「タイプ」設定がある場合は、リストされているタイプのみが認識されます。そうでない場合は、node_modules / @ types内のすべてを認識します
Dan

2

次のように書くこともできます:

let elem: any;
elem = $("div.printArea");
elem.printArea();

2

表記を使用する代わりに(または「任意の」としてより適切に)無視構文を使用することもできます。

// @ts-ignore
$("div.printArea").printArea();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.