sort-type-constituents // 排序类型成员
强制类型联合/交集的组成部分按字母顺序排序。
🔧
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
💡
此规则报告的一些问题可以通过编辑器 建议 手动修复。
已弃用
对联合 (|
) 和交集 (&
) 类型进行排序可以帮助
- 保持代码库标准化
- 查找重复类型
- 减少差异变化
此规则报告任何未按字母顺序排序的类型。
类型排序不区分大小写,并将数字视为人类,在出现平局时回退到字符代码排序。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/sort-type-constituents": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 错误
- ✅ 正确
type T1 = B | A;
type T2 = { b: string } & { a: string };
type T3 = [1, 2, 4] & [1, 2, 3];
type T4 =
| [1, 2, 4]
| [1, 2, 3]
| { b: string }
| { a: string }
| (() => void)
| (() => string)
| 'b'
| 'a'
| 'b'
| 'a'
| readonly string[]
| readonly number[]
| string[]
| number[]
| B
| A
| string
| any;
在游乐场中打开type T1 = A | B;
type T2 = { a: string } & { b: string };
type T3 = [1, 2, 3] & [1, 2, 4];
type T4 =
| A
| B
| number[]
| string[]
| any
| string
| readonly number[]
| readonly string[]
| 'a'
| 'a'
| 'b'
| 'b'
| (() => string)
| (() => void)
| { a: string }
| { b: string }
| [1, 2, 3]
| [1, 2, 4];
在游乐场中打开选项
此规则接受以下选项
type Options = [
{
/** Whether to sort using case sensitive sorting. */
caseSensitive?: boolean;
/** Whether to check intersection types. */
checkIntersections?: boolean;
/** Whether to check union types. */
checkUnions?: boolean;
/** Ordering of the groups. */
groupOrder?: (
| 'conditional'
| 'function'
| 'import'
| 'intersection'
| 'keyword'
| 'literal'
| 'named'
| 'nullish'
| 'object'
| 'operator'
| 'tuple'
| 'union'
)[];
},
];
const defaultOptions: Options = [
{
checkIntersections: true,
checkUnions: true,
caseSensitive: false,
groupOrder: [
'named',
'keyword',
'operator',
'literal',
'function',
'import',
'conditional',
'object',
'tuple',
'intersection',
'union',
'nullish',
],
},
];
caseSensitive
是否使用区分大小写的字符串比较进行排序。
带有 { "caseSensitive": true }
的代码示例
- ❌ 错误
- ✅ 正确
checkIntersections
是否检查交集类型 (&
)。
带有 { "checkIntersections": true }
(默认值)的代码示例
checkUnions
是否检查联合类型 (|
)。
带有 { "checkUnions": true }
(默认值)的代码示例
groupOrder
类型的每个组成部分都将被放置在一个组中,然后规则将在每个组内按字母顺序排序。组的排序由此选项决定。
conditional
- 条件类型 (A extends B ? C : D
)function
- 函数和构造函数类型 (() => void
,new () => type
)import
- 导入类型 (import('path')
)intersection
- 交集类型 (A & B
)keyword
- 关键字类型 (any
,string
等)literal
- 字面量类型 (1
,'b'
,true
等)named
- 命名类型 (A
,A['prop']
,B[]
,Array<C>
)object
- 对象类型 ({ a: string }
,{ [key: string]: number }
)operator
- 运算符类型 (keyof A
,typeof B
,readonly C[]
)tuple
- 元组类型 ([A, B, C]
)union
- 联合类型 (A | B
)nullish
-null
和undefined
例如,使用 { "groupOrder": ["literal", "nullish" ]}
配置规则
何时不使用它
此规则纯粹是用于维护项目一致性的风格规则。如果您不想为交集和联合类型保持一致、可预测的顺序,可以将其关闭。但是,请记住,不一致的风格会损害项目的可读性。