Dev Study
← 解説「コンストラクタ引数プロパティ — 宣言と代入の省略記法」に戻る

サンプルコードで身につける: コンストラクタ引数プロパティ — 宣言と代入の省略記法

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1従来の書き方との比較

同じ意味のクラスを、従来の書き方と引数プロパティで並べた例です。constructor(public x: number) {} の1行が、プロパティ宣言・引数の受け取り・this.x = x の3つを兼ねています。まずは「修飾子を付けると引数がプロパティに昇格する」と覚えましょう。

TypeScript

2private 引数プロパティ — 内部状態を1行で作る

private を付ければ「外から見えないプロパティ」が1行で作れます。残高のような内部状態をコンストラクタで受け取りつつ隠す、アクセス修飾子のレッスンでやった設計がさらに短く書けます。外から触れるのはメソッド経由だけ、という形は変わりません。

TypeScript

3readonly との組み合わせ

引数プロパティには readonly も組み合わせられます。public readonly とすれば「外から読めるが書き換えられない」プロパティになり、ID や確定済みの金額のような作成後に変わってはいけない値にぴったりです。引数が増えたら、このように改行して並べると読みやすくなります。

TypeScript

4修飾子なしの引数はプロパティにならない

つまずきポイントの確認です。修飾子を付けない width と height はただの引数で、コンストラクタの外には残りません。「コンストラクタの中でだけ使う値」と「プロパティとして持ち続ける値」を、修飾子の有無で書き分けられると整理できます。

TypeScript

5サービス + DI 風の組み立て

サービスクラスが依存先(MessageStore)をコンストラクタで受け取る、依存性の注入(DI)の典型例です。constructor(private readonly store: MessageStore) {} は、NestJS のコントローラやサービスで毎日見る形そのものです。依存を外から渡す作りにしておくと、テスト時に偽物へ差し替えるのも簡単になります。

TypeScript