コンテンツへスキップ

@stylistic/ts/

member-delimiter-style

TypeScriptでは、インターフェースと型エイリアス内のメンバー間に3つの区切り文字を使用できます。

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

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

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

コードの可読性を高めるために、一般的にコードベース全体で同じスタイルを一貫して使用するのが最適です。

このルールは、設定可能なコードスタイルを1つに維持することを強制します。また、構成の最後のメンバーの区切り文字の有無、および単一行宣言用の個別の区切り文字構文も標準化できます。

オプション

デフォルト設定

json
{
  "multiline": {
    "delimiter": "semi",
    "requireLast": true
  },
  "singleline": {
    "delimiter": "semi",
    "requireLast": false
  },
  "multilineDetection": "brackets"
}

multiline設定は、複数行のinterface/type定義にのみ適用されます。singleline設定は、単一行のinterface/type定義にのみ適用されます。2つの設定は完全に別個であり、互いに影響を与えません。

multilineDetectionは、複数行としてカウントされるものを決定します

  • "brackets" (デフォルト) 型またはインターフェース内の改行はすべて複数行にします。
  • "last-member" インターフェースの最後のメンバーが最後の括弧と同じ行にある場合、単一行としてカウントされます。

delimiter

3つの値を受け入れます(singlelineの場合は2つ)

  • comma - 各メンバーはコンマ(,)で区切る必要があります。
  • semi - 各メンバーはセミコロン(;)で区切る必要があります。
  • none - 各メンバーは何も区切らない必要があります。

:::note noneは、単一行のメンバー間に区切り文字がないとTSで構文エラーになるため、singlelineのオプションではありません。 ::

requireLast

interface/typeの最後のメンバーに区切り文字が必要かどうかを決定します

  • true - 最後のメンバーには、必ず区切り文字が必要です。
  • false - 最後のメンバーには、必ず区切り文字があってはなりません。

overrides

interfaceまたはtype定義/インライン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 }

使用しない場合

インターフェースと型リテラルで一貫したメンバー区切り文字を強制することに関心がない場合は、このルールは必要ありません。

正しい
誤り

MITライセンスの下でリリースされています。