成员分隔符样式
已弃用
格式化规则现在位于 eslint-stylistic 中。 @stylistic/ts/member-delimiter-style 是此规则的替代品。
有关更多信息,请参阅 弃用格式化规则。
要求接口和类型字面量使用特定的成员分隔符样式。
🔧
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
TypeScript 允许在接口和类型别名中的成员之间使用三种分隔符
interface Foo {
// Semicolons (default, preferred in TypeScript):
name: string;
// Commas (JSON-like):
name: string,
// Line breaks (none):
name: string
}
为了代码可读性,通常最好在代码库中始终使用相同的样式。
此规则强制执行一种可配置的代码样式。它还可以标准化构造中最后一个成员中分隔符的存在(或不存在),以及单行声明的单独分隔符语法。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/member-delimiter-style": "error"
}
};
在游乐场中尝试此规则 ↗
选项
此规则接受以下选项
type MultiLineOption = 'comma' | 'none' | 'semi';
type SingleLineOption = 'comma' | 'semi';
type DelimiterConfig = {
multiline?: {
delimiter?: MultiLineOption;
requireLast?: boolean;
};
singleline?: {
delimiter?: SingleLineOption;
requireLast?: boolean;
};
};
type Options = [
{
multiline?: {
delimiter?: MultiLineOption;
requireLast?: boolean;
};
multilineDetection?: 'brackets' | 'last-member';
overrides?: {
interface?: DelimiterConfig;
typeLiteral?: DelimiterConfig;
};
singleline?: {
delimiter?: SingleLineOption;
requireLast?: boolean;
};
},
];
const defaultOptions: Options = [
{
multiline: { delimiter: 'semi', requireLast: true },
singleline: { delimiter: 'semi', requireLast: false },
multilineDetection: 'brackets',
},
];
默认配置
{
"multiline": {
"delimiter": "semi",
"requireLast": true
},
"singleline": {
"delimiter": "semi",
"requireLast": false
},
"multilineDetection": "brackets"
}
multiline
配置仅适用于多行 interface
/type
定义。singleline
配置仅适用于单行 interface
/type
定义。这两个配置是完全独立的,不会相互影响。
multilineDetection
确定什么算作多行
"brackets"
(默认)类型或接口中的任何换行符都会使其成为多行。"last-member"
如果接口的最后一个成员与最后一个括号在同一行,则它被计为单行。
delimiter
接受三个值(或两个值用于 singleline
)
comma
- 每个成员应以逗号 (,
) 分隔。semi
- 每个成员应以分号 (;
) 分隔。none
- 每个成员不应使用任何分隔符。
注意
none
不是 singleline
的选项,因为在单行上成员之间没有分隔符在 TS 中是语法错误。
requireLast
确定 interface
/type
中的最后一个成员是否应该有分隔符
true
- 最后一个成员 **必须** 有分隔符。false
- 最后一个成员 **不能** 有分隔符。
overrides
允许您为 interface
或 type
定义/内联 type
指定特定选项。
例如,要为 type
要求逗号,而为多行 interface
要求分号
{
"multiline": {
"delimiter": "comma",
"requireLast": true
},
"singleline": {
"delimiter": "comma",
"requireLast": true
},
"overrides": {
"interface": {
"multiline": {
"delimiter": "semi",
"requireLast": true
}
}
}
}
示例
使用默认配置的此规则的代码示例
- ❌ 错误
- ✅ 正确
// missing semicolon delimiter
interface Foo {
name: string
greet(): string
}
// using incorrect delimiter
interface Bar {
name: string,
greet(): string,
}
// missing last member delimiter
interface Baz {
name: string;
greet(): string
}
// incorrect delimiter
type FooBar = { name: string, greet(): string }
// last member should not have delimiter
type FooBar = { name: string; greet(): string; }
在 Playground 中打开interface Foo {
name: string;
greet(): string;
}
interface Foo { name: string }
type Bar = {
name: string;
greet(): string;
}
type Bar = { name: string }
type FooBar = { name: string; greet(): string }
在 Playground 中打开何时不使用它
如果您出于风格原因特别想使用两种成员分隔符,或者不想强制执行一种风格,您可以避免使用此规则。
但是,请记住,不一致的风格会影响项目的可读性。我们建议为该规则选择一个最适合您项目的选项。