コンテンツにスキップ

@stylistic/

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 - 各メンバーは何も区切らないようにする必要があります。

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

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ライセンスでリリースされています。