TypeScriptのコンストラクタ引数でのpublic/privateが非推奨となっていた件

オフ 投稿者: sesera

TypeScriptでクラスを書くとき、コンストラクタの引数でpublicやprivateを使う方法がありましたよね。でも最近、この書き方が非推奨になっているって知っていましたか?

目次

非推奨となった背景

TypeScriptチームが2023年にこの機能を非推奨とした理由には、いくつかの問題点がありました:

  • コードの可読性が低下する
  • JavaScriptの仕様から離れすぎている
  • バンドラーやミニファイアでの最適化が難しい
  • デコレータとの相性が良くない

実際にTypeScriptチームからは「シンプルな方法を推奨したい」という意見が出ています。

推奨される新しい書き方

これまでの書き方:

class User {
  constructor(public name: string, private age: number) {}
}

推奨される新しい書き方:

class User {
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public name: string;
  private age: number;
}

この新しい書き方のほうが、プロパティの定義が明確になっていますね。

移行のポイントとベストプラクティス

既存のコードを移行する際のポイントをまとめました:

  • プロパティの型定義を明示的に書く
  • アクセス修飾子は必要な場合のみ使用する
  • コンストラクタ引数は型のみを指定する
  • クラスのプロパティは上部でまとめて定義する

移行は急いで行う必要はありません。既存のコードは動作し続けますが、新しいコードを書く際は推奨される方法を使うのがベストですね。

まとめ

コンストラクタ引数でのアクセス修飾子は非推奨となりましたが、これはTypeScriptをより明確で保守しやすいものにするための変更です。新しい書き方に慣れるまで少し時間がかかるかもしれませんが、コードの品質向上につながる良い変更だと考えられています。

リンク:TypeScriptで非推奨になっている機能一覧