跳到主要内容

@typescript-eslint/member-delimiter-style

要求接口和类型别名中的成员之间使用特定的分隔符。

支持定义的分隔符有三种:分号、逗号、无分隔符。

规则配置

// code-linter.json5
{
"rules": {
"@typescript-eslint/member-delimiter-style": "error"
}
}

选项

支持配置以下选项:

type BaseOption = {
multiline: {
delimiter: 'none' | 'semi' | 'comma';
requireLast: boolean;
};
singleline: {
delimiter: 'semi' | 'comma';
requireLast: boolean;
};
}

type Options = {
multiline: {
delimiter: 'none' | 'semi' | 'comma';
requireLast: boolean;
};
singleline: {
delimiter: 'semi' | 'comma';
requireLast: boolean;
};
overrides: {
interface: BaseOption;
typeLiteral: BaseOption;
};
multilineDetection: 'brackets' | 'last-member';
}
  • multiline/singleline:对象类型,分别定义多行/单行的interface/type alias成员之间分隔符风格,支持以下两种属性:

    • delimiter:枚举类型,定义分隔符风格,取值范围如下:
      • none:表示不需要加分隔符。
      • semi:表示建议使用分号作为分隔符。
      • comma:表示建议使用逗号作为分隔符。
    • requireLast:布尔类型,可以设置为true或者false,true表示最后一个成员的末尾需要加分隔符,false表示最后一个成员的末尾不加分隔符。
  • multilineDetection:枚举类型,判断多行的依据,可取值如下:

    • brackets:默认值,表示interface/type alias中存在换行,即视为多行。
    • last-member:表示interface/type alias的最后一个成员与右括号(“}”)处于同一行,则视为单行。
  • overrides:对象类型,可以针对interface/type alias进行差异化配置,支持以下两种属性:

    • interface:对象类型,可以对interface进行差异化配置,配置方式同multiline/singleline。
    • typeLiteral:对象类型,可以对type alias进行差异化配置,配置方式同multiline/singleline。

示例:

"@typescript-eslint/member-delimiter-style": [
"error",
{
// 多行interface/type alias使用逗号作为分隔符,最后一个成员末尾不加分隔符
"multiline": {
"delimiter": "comma",
"requireLast": false
},
// 单行interface/type alias使用分号作为分隔符,最后一个成员末尾需要加分隔符
"singleline": {
"delimiter": "semi",
"requireLast": true
},
// 分别对interface和type alias进行差异化配置
overrides: {
interface: {
"multiline": {
"delimiter": "comma",
"requireLast": false
},
"singleline": {
"delimiter": "semi",
"requireLast": true
}
},
typeLiteral: {
"multiline": {
"delimiter": "comma",
"requireLast": false
},
"singleline": {
"delimiter": "semi",
"requireLast": true
}
}
},
multilineDetection: "brackets",
},
]

正例

// 默认接口/类型别名定义为多行的场景下,每个成员应以分号 (;) 分隔。 最后一个成员必须有一个分隔符。
// 默认接口/类型别名定义为单行的场景下,每个成员应以分号 (;) 分隔。最后一个成员不能有分隔符。
// 接口/类型别名中的任何换行符都会使其成为多行。
export interface Foo1 {
name: string;

greet(): string;
}

export interface Foo2 { name: string }

反例

// missing semicolon delimiter
export interface Foo {
name: string
greet(): string
}

// using incorrect delimiter
export interface Bar {
name: string,
greet(): string,
}

// missing last member delimiter
export interface Baz {
name: string;
greet(): string
}

规则集

plugin:@typescript-eslint/all

Code Linter代码检查规则的配置指导请参考Code Linter代码检查