不要な型制約を禁止します。
ジェネリック型に対する不要な制約を禁止します。
✅
拡張 "plugin:@typescript-eslint/recommended"
を ESLint設定 で有効にすると、このルールが有効になります。
💡
このルールによって報告される問題の中には、エディターの 提案によって手動で修正できるものもあります。.
TypeScriptのジェネリック型パラメーター(<T>
)は、extends
キーワードを使用して「制約」される場合があります。extends
が提供されない場合、型パラメーターはunknown
に制約がデフォルト設定されます。そのため、any
またはunknown
からextend
することは冗長です。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unnecessary-type-constraint": "error"
}
};
Playgroundでこのルールを試してみてください ↗
例
- ❌ 正しくない
- ✅ 正しい
interface FooAny<T extends any> {}
interface FooUnknown<T extends unknown> {}
type BarAny<T extends any> = {};
type BarUnknown<T extends unknown> = {};
class BazAny<T extends any> {
quxAny<U extends any>() {}
}
const QuuxAny = <T extends any>() => {};
function QuuzAny<T extends any>() {}
Playgroundで開くinterface Foo<T> {}
type Bar<T> = {};
class Baz<T> {
qux<U>() {}
}
const Quux = <T>() => {};
function Quuz<T>() {}
Playgroundで開くオプション
このルールは設定できません。
使用しない場合
型制約の特定のスタイルを気にしない場合、またはそもそも型制約を使用しない場合は、このルールは必要ありません。