description |
---|
Disallow unnecessary constraints on generic types. |
import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
🛑 This file is source code, not the primary documentation location! 🛑
See https://typescript-eslint.io/rules/no-unnecessary-type-constraint for documentation.
Generic type parameters (<T>
) in TypeScript may be "constrained" with an extends
keyword.
When no extends
is provided, type parameters default a constraint to unknown
.
It is therefore redundant to extend
from any
or unknown
.
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>() {}
interface Foo<T> {}
type Bar<T> = {};
class Baz<T> {
qux<U>() {}
}
const Quux = <T>() => {};
function Quuz<T>() {}
If you don't care about the specific styles of your type constraints, or never use them in the first place, then you will not need this rule.