跳至主要内容

禁止冗余类型组成部分

禁止在联合和交集中使用无用或覆盖类型信息的成员。

💭

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

某些类型可以覆盖联合或交集中的某些其他类型(“组成部分”),或者被某些其他类型覆盖。TypeScript 的类型集合论包括构成类型在父联合或交集中可能无用的情况。

| 联合中

  • anyunknown “覆盖”所有其他联合成员
  • never 从联合中删除,除了在返回类型位置
  • 原始类型,如 string,“覆盖”其任何文字类型,如 ""

& 交集中

  • anynever “覆盖”所有其他交集成员
  • 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';
在游乐场中打开

限制

此规则很安全,只适用于底部类型、顶部类型以及比较文字类型和原始类型。

选项

此规则不可配置。

何时不使用它

某些项目选择偶尔有意包含冗余类型组成部分以用于文档目的。例如,以下代码在联合中包含 string,即使 unknown 使其变得冗余

/**
* Normally a string name, but sometimes arbitrary unknown data.
*/
type NameOrOther = string | unknown;

如果您强烈偏爱这些不必要的类型组成部分,此规则可能不适合您。

进一步阅读


类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除

资源