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 }
使用しない場合
インターフェースと型リテラルで一貫したメンバー区切り文字を強制することに関心がない場合は、このルールは必要ありません。
正しい
誤り