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