跳至内容

@stylistic/ts/

member-delimiter-style

TypeScript 允许在接口和类型别名中的成员之间使用三种分隔符

ts
interface Foo {
    // Semicolons (default, preferred in TypeScript):
    name: string;

    // Commas (JSON-like):
    name: string,

    // Line breaks (none):
    name: string
}

为了代码可读性,通常最好在代码库中始终使用相同的样式。

此规则强制执行保持一种可配置的代码样式。它还可以标准化构造中最后一个成员中分隔符的存在(或不存在),以及单行声明的单独分隔符语法。

选项

默认配置

json
{
  "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 - 每个成员都应该用空分隔。

:::note none 不是 singleline 的选项,因为在单行上成员之间没有分隔符在 TS 中是语法错误。 ::

requireLast

确定 interface/type 中的最后一个成员是否应该有分隔符

  • true - 最后一个成员**必须**有分隔符。
  • false - 最后一个成员**不能**有分隔符。

overrides

允许您为 interfacetype 定义/内联 type 指定特定选项。

例如,要为 type 要求逗号,而为多行 interface 要求分号

json
{
  "multiline": {
    "delimiter": "comma",
    "requireLast": true
  },
  "singleline": {
    "delimiter": "comma",
    "requireLast": true
  },
  "overrides": {
    "interface": {
      "multiline": {
        "delimiter": "semi",
        "requireLast": true
      }
    }
  }
}

示例

使用默认配置的此规则的代码示例

ts
/*eslint @stylistic/ts/member-delimiter-style: "error"*/

// 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; }
ts
/*eslint @stylistic/ts/member-delimiter-style: "error"*/

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 }

何时不使用它

如果您不关心在接口和类型字面量中强制执行一致的成员分隔符,那么您将不需要此规则。

正确
不正确