no-unsafe-return
関数から型
any
の値が返されるのを禁止します。
拡張 "plugin:@typescript-eslint/recommended-type-checked"
を ESLint設定 で使用すると、このルールが有効になります。
このルールを実行するには 型情報 が必要です。
TypeScript における any
型は、型システムからの危険な「エスケープハッチ」です。any
を使用すると、多くの型チェックルールが無効になり、一般的には最後の手段として、またはコードをプロトタイピングする場合にのみ使用するのが最適です。
最善の意図を持っていても、any
型がコードベースに漏れ出すことがあります。関数から any
型の値を返すと、コードベースに潜在的な型の安全性の穴とバグの原因が生じる可能性があります。
このルールは、関数から any
または any[]
を返すことを禁止します。
このルールでは、ジェネリック型の引数の型も比較して、特定の型を期待している関数にジェネリックな位置で安全でない any
を返さないようにします。たとえば、Set<string>
を返すように宣言されている関数から Set<any>
を返すとエラーになります。
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-return": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 不正
- ✅ 正しい
function foo1() {
return 1 as any;
}
function foo2() {
return Object.create(null);
}
const foo3 = () => {
return 1 as any;
};
const foo4 = () => Object.create(null);
function foo5() {
return [] as any[];
}
function foo6() {
return [] as Array<any>;
}
function foo7() {
return [] as readonly any[];
}
function foo8() {
return [] as Readonly<any[]>;
}
const foo9 = () => {
return [] as any[];
};
const foo10 = () => [] as any[];
const foo11 = (): string[] => [1, 2, 3] as any[];
// generic position examples
function assignability1(): Set<string> {
return new Set<any>([1]);
}
type TAssign = () => Set<string>;
const assignability2: TAssign = () => new Set<any>([true]);
プレイグラウンドで開くfunction foo1() {
return 1;
}
function foo2() {
return Object.create(null) as Record<string, unknown>;
}
const foo3 = () => [];
const foo4 = () => ['a'];
function assignability1(): Set<string> {
return new Set<string>(['foo']);
}
type TAssign = () => Set<string>;
const assignability2: TAssign = () => new Set(['foo']);
プレイグラウンドで開くany
を unknown
に返すことがルールで許可されている場合があります。
許可されている any
から unknown
への戻り値の例
function foo1(): unknown {
return JSON.parse(singleObjString); // Return type for JSON.parse is any.
}
function foo2(): unknown[] {
return [] as any[];
}
プレイグラウンドで開くオプション
このルールは設定できません。
使用しない場合
コードベースに既存の any
や安全でないコード領域が多数ある場合、このルールを有効にするのが難しい場合があります。プロジェクトの安全でない領域で型の安全性を高めるまでは、no-unsafe-*
ルールをスキップする方が簡単な場合があります。このルールを完全に無効にする代わりに、特定の状況に対してESLintの無効化コメントを使用することを検討してください。
関連情報
型チェックされたリンタルールは、従来のリンタルールよりも強力ですが、型チェックされたリンティングを設定する必要もあります。型チェックされたルールを有効にした後にパフォーマンスの低下が発生する場合は、パフォーマンスのトラブルシューティングを参照してください。