跳至主要内容

成员分隔符样式

已弃用

格式化规则现在位于 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

允许您为 interfacetype 定义/内联 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 中打开

何时不使用它

如果您出于风格原因特别想使用两种成员分隔符,或者不想强制执行一种风格,您可以避免使用此规则。

但是,请记住,不一致的风格会影响项目的可读性。我们建议为该规则选择一个最适合您项目的选项。

资源