禁止冗余类型组成部分
禁止在联合和交集中使用无用或覆盖类型信息的成员。
✅
在 "plugin:@typescript-eslint/recommended-type-checked"
中扩展 ESLint 配置 将启用此规则。
💭
此规则需要 类型信息 才能运行。
某些类型可以覆盖联合或交集中的某些其他类型(“组成部分”),或者被某些其他类型覆盖。TypeScript 的类型集合论包括构成类型在父联合或交集中可能无用的情况。
在 |
联合中
any
和unknown
“覆盖”所有其他联合成员never
从联合中删除,除了在返回类型位置- 原始类型,如
string
,“覆盖”其任何文字类型,如""
在 &
交集中
any
和never
“覆盖”所有其他交集成员unknown
从交集中删除- 文字类型“覆盖”交集中的任何原始类型
- 文字类型,如
""
,“覆盖”其任何原始类型,如string
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-redundant-type-constituents": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 错误
- ✅ 正确
type UnionAny = any | 'foo';
type UnionUnknown = unknown | 'foo';
type UnionNever = never | 'foo';
type UnionBooleanLiteral = boolean | false;
type UnionNumberLiteral = number | 1;
type UnionStringLiteral = string | 'foo';
type IntersectionAny = any & 'foo';
type IntersectionUnknown = string & unknown;
type IntersectionNever = string | never;
type IntersectionBooleanLiteral = boolean & false;
type IntersectionNumberLiteral = number & 1;
type IntersectionStringLiteral = string & 'foo';
在游乐场中打开type UnionAny = any;
type UnionUnknown = unknown;
type UnionNever = never;
type UnionBooleanLiteral = boolean;
type UnionNumberLiteral = number;
type UnionStringLiteral = string;
type IntersectionAny = any;
type IntersectionUnknown = string;
type IntersectionNever = string;
type IntersectionBooleanLiteral = false;
type IntersectionNumberLiteral = 1;
type IntersectionStringLiteral = 'foo';
在游乐场中打开限制
此规则很安全,只适用于底部类型、顶部类型以及比较文字类型和原始类型。
选项
此规则不可配置。
何时不使用它
某些项目选择偶尔有意包含冗余类型组成部分以用于文档目的。例如,以下代码在联合中包含 string
,即使 unknown
使其变得冗余
/**
* Normally a string name, but sometimes arbitrary unknown data.
*/
type NameOrOther = string | unknown;
如果您强烈偏爱这些不必要的类型组成部分,此规则可能不适合您。
进一步阅读
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。