🟨
確定代入アサーションはつけるべき?
確定代入アサーション(definite assignment assertion)はつけるべき?
結論
確定代入アサーション(!
)は「本当にその変数やプロパティが必ず初期化される」と自信がある場合のみ使うべきです。
乱用は避け、TypeScriptの型安全性を損なわないよう注意が必要です。
詳細
- 確定代入アサーション(
!
)は、TypeScriptのstrictNullChecks
が有効なときに「この変数(プロパティ)は必ず初期化される」とコンパイラに伝えるためのものです。 - これを使うと、初期化チェックのエラーが出なくなりますが、実際には初期化されていない場合でもエラーを抑制してしまいます。
使うべきケース
- クラスのプロパティをコンストラクタやライフサイクルの中で必ず初期化する場合
- 外部フレームワークやライブラリが必ず値をセットしてくれると分かっている場合
使うべきでないケース
- 初期化タイミングに自信がない場合
- 本来はundefinedも許容すべき設計なのに、型エラーを消すためだけに使う場合
まとめ
確定代入アサーションは「この値は必ず初期化される」と自信を持てるときだけ使いましょう。
型安全性を維持するため、むやみにエラー回避目的で使うのは避けてください。
基本は「?」や「undefined許容型」を使い、どうしても必要なときだけ「!」を使うのが安全です。
Discussion