禁止类型成员重复
禁止联合类型或交集类型中出现重复的组成部分。
🔧
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
💭
此规则需要 类型信息 才能运行。
TypeScript 支持联合类型和交集类型中出现重复的类型(“组成部分”)。但是,开发人员通常期望每个组成部分在其交集或联合中都是唯一的。重复的值会使代码过于冗长,并通常降低可读性。
此规则禁止重复的联合或交集组成部分。如果类型在类型系统中评估为相同的结果,我们认为它们是重复的。例如,给定 type A = string
和 type T = string | A
,此规则将标记 A
与 string
类型相同。
- ❌ 错误
- ✅ 正确
type T1 = 'A' | 'A';
type T2 = A | A | B;
type T3 = { a: string } & { a: string };
type T4 = [1, 2, 3] | [1, 2, 3];
type StringA = string;
type StringB = string;
type T5 = StringA | StringB;
在 Playground 中打开type T1 = 'A' | 'B';
type T2 = A | B | C;
type T3 = { a: string } & { b: string };
type T4 = [1, 2, 3] | [1, 2, 3, 4];
type StringA = string;
type NumberB = number;
type T5 = StringA | NumberB;
在 Playground 中打开.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-duplicate-type-constituents": "error"
}
};
在 Playground 中尝试此规则 ↗
选项
此规则接受以下选项
type Options = [
{
ignoreIntersections?: boolean;
ignoreUnions?: boolean;
},
];
const defaultOptions: Options = [
{ ignoreIntersections: false, ignoreUnions: false },
];
ignoreIntersections
设置为 true 时,将忽略对交集类型组成部分的重复检查。
ignoreUnions
设置为 true 时,将忽略对联合类型组成部分的重复检查。
何时不使用它
出于文档目的,有时包含相同类型的别名可能很有用。您可能考虑使用 ESLint 禁用注释 来处理这些特定情况,而不是完全禁用此规则。
在某些情况下,品牌类型 可能是表示底层数据类型的类型安全方式。
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。