web-dev-qa-db-ja.com

定義ファイルに対してのみ暗黙的なAnyを許可する

"noImplicitAny": truetsconfig.jsonオプションを設定してTypeScriptを使用しています。

typings を使用して型定義ファイルを管理し、参照パスディレクティブを使用してアプリのエントリポイントにそれらを含めています。

/// <reference path="./typings/index.d.ts" />

問題は、一部の定義ファイルが暗黙的なanyに依存しているため、.d.tsファイルから多くのコンパイルエラーが発生することです。

パスやファイルの種類などに基づいて、これらのエラーを無効化/無音化する方法はありますか?

18
Tom Fenech

TypeScript 2.0のリリースで、 skipLibCheck コンパイラオプションが導入され、問題を解決できるはずです。

TypeScript 2.0では、新しい--skipLibCheckコンパイラオプションが追加され、宣言ファイル(拡張子.d.tsのファイル)の型チェックがスキップされます。プログラムに大きな宣言ファイルが含まれている場合、コンパイラーは多くの時間を費やして、すでにエラーが含まれていないことがわかっている宣言の型検査を行い、宣言ファイルの型検査をスキップすることでコンパイル時間を大幅に短縮できます。

1つのファイルでの宣言は他のファイルでの型チェックに影響を与える可能性があるため、--skipLibCheckが指定されていると、一部のエラーが検出されない場合があります。たとえば、非宣言ファイルが宣言ファイルで宣言された型を増加させる場合、宣言ファイルがチェックされたときにのみ報告されるエラーが発生する可能性があります。ただし、実際にはそのような状況はまれです。

デフォルトはfalseで、tsconfig.jsonで有効にできます:

{
    "compilerOptions": {
        "skipLibCheck": true,
        ...
    },
    ...
}
21
cartant

単一のインポート行で暗黙のanyを許可する必要がある場合は、型なしモジュールのインポートの直前に//@ts-ignore属性を使用して、暗黙のanyを無視することができます(次の行で発生する可能性のある他のすべてのエラーも同様です。それを正しくするのはあなた次第です)しかし、それはとても簡単で、すぐに私に多くの頭痛を解決します

たとえば、フォントawesome 5の場合

//@ts-ignore
import fontawesome from '@fortawesome/fontawesome';
//@ts-ignore
import regular from '@fortawesome/fontawesome-free-regular';

fontawesome.library.add(regular);

さらに、それはwebpackでうまく動作します

7
Mosè Bottacini