跳至主要内容

禁止类型成员重复

禁止联合类型或交集类型中出现重复的组成部分。

🔧

此规则报告的一些问题可以通过 --fix ESLint 命令行选项 自动修复。

💭

此规则需要 类型信息 才能运行。

TypeScript 支持联合类型和交集类型中出现重复的类型(“组成部分”)。但是,开发人员通常期望每个组成部分在其交集或联合中都是唯一的。重复的值会使代码过于冗长,并通常降低可读性。

此规则禁止重复的联合或交集组成部分。如果类型在类型系统中评估为相同的结果,我们认为它们是重复的。例如,给定 type A = stringtype T = string | A,此规则将标记 Astring 类型相同。

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 中打开
.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。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除

资源