no-explicit-any
any
型を禁止します。
✅
拡張 "plugin:@typescript-eslint/recommended"
を ESLint 設定 で有効にすると、このルールが有効になります。
🔧
このルールによって報告される問題の一部は、 --fix
ESLint コマンドラインオプション.
で自動的に修正できます
提案
によって手動で修正できます
- TypeScript の
any
型は、型システムからの危険な「エスケープハッチ」です。any
を使用すると、多くの型チェックルールが無効になり、通常は最後の手段として、またはコードのプロトタイピングを行う場合にのみ使用するのが最善です。このルールは、型アノテーションとしてのany
キーワードの明示的な使用を報告します。 any
の推奨される代替案には、次のようなものがあります。
型がわかっている場合は、
interface
またはtype
で記述する
型が不明な場合は、より安全な
unknown
型を使用するmodule.exports = {
"rules": {
"@typescript-eslint/no-explicit-any": "error"
}
};
TypeScript の --noImplicitAny
コンパイラオプションは、暗黙の any
を防ぎますが、このルールのように any
を明示的に使用することを防ぐわけではありません。
.eslintrc.cjs
- プレイグラウンドでこのルールを試す ↗
- 例
const age: any = 'seventeen';
❌ 不正const ages: any[] = ['seventeen'];
❌ 不正const ages: Array<any> = ['seventeen'];
❌ 不正function greet(): any {}
❌ 不正function greet(): any[] {}
❌ 不正function greet(): Array<any> {}
❌ 不正function greet(): Array<Array<any>> {}
❌ 不正function greet(param: Array<any>): string {}
❌ 不正function greet(param: Array<any>): Array<any> {}
❌ 不正const age: number = 17;
❌ 不正const ages: number[] = [17];
❌ 不正const ages: Array<number> = [17];
❌ 不正function greet(): string {}
❌ 不正function greet(): string[] {}
❌ 不正function greet(): Array<string> {}
❌ 不正function greet(): Array<Array<string>> {}
❌ 不正function greet(param: Array<string>): string {}
❌ 不正function greet(param: Array<string>): Array<string> {}
❌ 不正✅ 正しい
プレイグラウンドで開く
type Options = [
{
/** Whether to enable auto-fixing in which the `any` type is converted to the `unknown` type. */
fixToUnknown?: boolean;
/** Whether to ignore rest parameter arrays. */
ignoreRestArgs?: boolean;
},
];
const defaultOptions: Options = [
{ fixToUnknown: false, ignoreRestArgs: false },
];
オプション
このルールは、次のオプションを受け入れます。
fixToUnknown
デフォルトでは、このルールは自動 ESLint 修正を提供しません。オプトイン提案のみです。型を unknown
に切り替える方が安全ですが、追加の型エラーが発生する可能性があります。
{ "fixToUnknown": true }
を有効にすると、ルールに : any
を : unknown
に置き換える自動修正機能が追加されます。
ignoreRestArgs
function foo1(...args: any[]): void {}
function foo2(...args: readonly any[]): void {}
function foo3(...args: Array<any>): void {}
function foo4(...args: ReadonlyArray<any>): void {}
declare function bar(...args: any[]): void;
const baz = (...args: any[]) => {};
const qux = function (...args: any[]) {};
type Quux = (...args: any[]) => void;
type Quuz = new (...args: any[]) => void;
interface Grault {
(...args: any[]): void;
}
interface Corge {
new (...args: any[]): void;
}
interface Garply {
f(...args: any[]): void;
}
❌ 不正残余演算子からの配列を許可するかどうかを指定するブール値。デフォルトでは false
です。
以下の例は、{ignoreRestArgs: false}
の場合は不正ですが、{ignoreRestArgs: true}
の場合は正しいです。
使用しない場合
any
は常に危険なエスケープハッチです。可能な限り、常に避ける方が安全です。TypeScript のunknown
は、ほとんどの場合any
よりも推奨されます。- ただし、場合によっては
any
を使用する必要がある状況もあります。最も一般的なのは、次のとおりです。 - プロジェクトがまだ完全に TypeScript に移行していない場合、型がまだ不明または表現できない場所で
any
を一時的に使用できます。
外部パッケージにまだ型定義がない場合、.d.ts
を追加するまで any
を使用する場合