メインコンテンツにスキップ

**パラメータプロパティ**

クラスコンストラクタのパラメータプロパティを必須または禁止します。

TypeScriptには、クラスコンストラクタのパラメータとクラスプロパティを1か所で宣言するための「パラメータプロパティ」という省略記法があります。パラメータプロパティは、TypeScriptの初心者にとっては、クラスメンバーを宣言して初期化する他の方法よりも明示的ではないため、混乱を招く可能性があります。

このルールは、パラメータプロパティの使用を常に禁止するように、または可能な場合はその使用を強制するように設定できます。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/parameter-properties": "error"
}
};

プレイグラウンドでこのルールを試す ↗

オプション

このルールは次のオプションを受け入れます

type Modifier =
| 'private readonly'
| 'private'
| 'protected readonly'
| 'protected'
| 'public readonly'
| 'public'
| 'readonly';

type Options = [
{
allow?: Modifier[];
prefer?: 'class-property' | 'parameter-property';
},
];

const defaultOptions: Options = [{ allow: [], prefer: 'class-property' }];

このルールは、デフォルト状態では引数を必要とせず、パラメータプロパティの使用を完全に禁止します。以下のいずれかまたは両方を含むオプションオブジェクトを取ることができます。

  • "allow": 特定の種類のプロパティを無視できるようにします
  • "prefer": "class-property" (デフォルト) または "parameter-property"

allow

特定の種類のプロパティを無視したい場合は、"allow" を次のオプションのいずれかを含む配列として持つオブジェクトを渡すことができます。

  • allow、許可される修飾子の1つ以上を含む配列。有効な値は次のとおりです。
    • readonly、**readonly** パラメータプロパティを許可します。
    • private、**private** パラメータプロパティを許可します。
    • protected、**protected** パラメータプロパティを許可します。
    • public、**public** パラメータプロパティを許可します。
    • private readonly、**private readonly** パラメータプロパティを許可します。
    • protected readonly、**protected readonly** パラメータプロパティを許可します。
    • public readonly、**public readonly** パラメータプロパティを許可します。

たとえば、public プロパティを無視するには、次のようにします。

{
"@typescript-eslint/parameter-properties": [
true,
{
"allow": ["public"]
}
]
}

prefer

デフォルトでは、ルールはクラスプロパティ ("class-property") を優先します。("parameter-property") を使用して、代わりにパラメータプロパティを優先するように切り替えることができます。

"parameter-property" モードでは、次の場合にルールはレポートを発行します。

  • クラスプロパティとコンストラクタパラメータが同じ名前と型を持っている場合
  • コンストラクタパラメータがコンストラクタの先頭でクラスプロパティに代入されている場合

デフォルト

オプションなしのこのルールのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

readonly

{ "allow": ["readonly"] } オプションのコード例

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

private

{ "allow": ["private"] } オプションのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

protected

{ "allow": ["protected"] } オプションのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

public

{ "allow": ["public"] } オプションのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

private readonly

{ "allow": ["private readonly"] } オプションのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

protected readonly

{ "allow": ["protected readonly"] } オプションのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(public readonly name: string) {}
}
プレイグラウンドで開く

public readonly

{ "allow": ["public readonly"] } オプションのコード例

class Foo {
constructor(readonly name: string) {}
}

class Foo {
constructor(private name: string) {}
}

class Foo {
constructor(protected name: string) {}
}

class Foo {
constructor(public name: string) {}
}

class Foo {
constructor(private readonly name: string) {}
}

class Foo {
constructor(protected readonly name: string) {}
}
プレイグラウンドで開く

"parameter-property"

{ "prefer": "parameter-property" } オプションのコード例

class Foo {
private name: string;
constructor(name: string) {
this.name = name;
}
}

class Foo {
public readonly name: string;
constructor(name: string) {
this.name = name;
}
}

class Foo {
constructor(name: string) {
this.name = name;
}
name: string;
}
プレイグラウンドで開く

使用しない場合

クラスのコンストラクタで使用されるパラメータプロパティのスタイルを気にしない場合は、このルールは必要ありません。

ただし、スタイルに一貫性がないと、プロジェクトの可読性が損なわれる可能性があることに注意してください。プロジェクトに最適なオプションを1つ選択することをお勧めします。

リソース