**パラメータプロパティ**
クラスコンストラクタのパラメータプロパティを必須または禁止します。
TypeScriptには、クラスコンストラクタのパラメータとクラスプロパティを1か所で宣言するための「パラメータプロパティ」という省略記法があります。パラメータプロパティは、TypeScriptの初心者にとっては、クラスメンバーを宣言して初期化する他の方法よりも明示的ではないため、混乱を招く可能性があります。
このルールは、パラメータプロパティの使用を常に禁止するように、または可能な場合はその使用を強制するように設定できます。
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) {}
}
プレイグラウンドで開くclass Foo {
constructor(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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(private 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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(protected 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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(public 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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(private 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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(protected 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) {}
}
プレイグラウンドで開くclass Foo {
constructor(name: string) {}
}
class Foo {
constructor(public 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;
}
プレイグラウンドで開くclass Foo {
private differentName: string;
constructor(name: string) {
this.differentName = name;
}
}
class Foo {
private differentType: number | undefined;
constructor(differentType: number) {
this.differentType = differentType;
}
}
class Foo {
protected logicInConstructor: string;
constructor(logicInConstructor: string) {
console.log('Hello, world!');
this.logicInConstructor = logicInConstructor;
}
}
プレイグラウンドで開く使用しない場合
クラスのコンストラクタで使用されるパラメータプロパティのスタイルを気にしない場合は、このルールは必要ありません。
ただし、スタイルに一貫性がないと、プロジェクトの可読性が損なわれる可能性があることに注意してください。プロジェクトに最適なオプションを1つ選択することをお勧めします。