技術とかの雑なToday I Learnedメモ

readonlyのこと

readonly のこと

昨日type-fest の話をしたのでアレなんだけど、そもそも readonly を使うべきところってどこだろうみたいな気持ちがある。

TypeScript の readonly プロパティを使いこなす - Qiita

基本的に「可能な限りつける」ということになりそう。

特に「関数が引数として Object を受け取る場合」はつけたほうがいいっぽい。

関数が引数として受け取った Object のプロパティが、その関数内で変更されないことを readonly で保証できる。

……なるほど、たしかにそのとおりだなあ。

プロパティをすべて readonly で型定義すれば、その型の値を引数として受け取る関数では書き換えられないことがはっきりするが、関数を呼び出す側でその関数に渡す引数の値を作るときに readonly だと「あとからプロパティに値を追加できない」という問題が出る。というか昨日それで悩んでいた。

この記事でも書いているが、すべてのプロパティに readonly をつけるのは結構大変なのでReadonly<T>を使うのもアリだけど、Readonly<T>はネストしているプロパティが readonly にならない。

こうなると type-fest のReadonlyDeep<T>を使いたい。

じゃあ愚直にプロパティに readonly をつけていったらどうなるかというと、今度は値を組み立てる部分でMutable<T>が欲しくなるのでどのみち type-fest を入れたい。

つまり type-fest 最高っぽい。