Skip to main content

no-unnecessary-type-constraint

Disallow unnecessary constraints on generic types.

💡

Some problems reported by this rule are manually fixable by editor suggestions.

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.

eslint.config.mjs
export default defineConfig({
rules: {
"@typescript-eslint/no-unnecessary-type-constraint": "error"
}
});

Try this rule in the playground ↗

Examples​

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>() {}
Open in Playground

Options​

This rule is not configurable.

When Not To Use It​

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.

Resources​