メインコンテンツへスキップ

no-unsafe-return

関数から型anyの値が返されるのを禁止します。

拡張 "plugin:@typescript-eslint/recommended-type-checked" ESLint設定 で使用すると、このルールが有効になります。

💭

このルールを実行するには 型情報 が必要です。

TypeScript における any 型は、型システムからの危険な「エスケープハッチ」です。any を使用すると、多くの型チェックルールが無効になり、一般的には最後の手段として、またはコードをプロトタイピングする場合にのみ使用するのが最適です。

最善の意図を持っていても、any 型がコードベースに漏れ出すことがあります。関数から any 型の値を返すと、コードベースに潜在的な型の安全性の穴とバグの原因が生じる可能性があります。

このルールは、関数から any または any[] を返すことを禁止します。

このルールでは、ジェネリック型の引数の型も比較して、特定の型を期待している関数にジェネリックな位置で安全でない any を返さないようにします。たとえば、Set<string> を返すように宣言されている関数から Set<any> を返すとエラーになります。

.eslintrc.cjs
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]);
プレイグラウンドで開く

anyunknown に返すことがルールで許可されている場合があります。

許可されている 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の無効化コメントを使用することを検討してください。


型チェックされたリンタルールは、従来のリンタルールよりも強力ですが、型チェックされたリンティングを設定する必要もあります。型チェックされたルールを有効にした後にパフォーマンスの低下が発生する場合は、パフォーマンスのトラブルシューティングを参照してください。

参考資料