TypeScriptのreadonly
2種類ある
code:ts
type A = { readonly a: string[] }
code:ts
type A = { a: readonly string[] }
当然、併用できる
code:ts
type A = { readonly a: readonly string[] }
readonlyと書くのが冗長、というのすごいわかるmrsekut.icon
Readonlyでも長い。ROとか、DR(DeepReadonly)とかにしても良い気がする
頻出する割に冗長なのが問題
というかコンパイラオプションで基本は全部付ける、とかにして欲しいmrsekut.icon
recordのmutableな変更を避けるために、常にreadonly付きで定義しよう
code:ts
export type FirstGenre = Readonly<{
type: 'first';
id: GenreId;
name: string;
}>;
まあ、普段hoge.x = 2みたいにrecordに代入することはしないけど、mrsekut.icon
「しないけど」は、いわば運用でカバーなので、型で指定するに越したことはない
tupleからreadonlyを取り除く
code:ts
type A<T> = {
};
arrayにreadonlyをつける
code:ts
type A<T> = {
};
特に配列の場合は積極的に書くと良いかも
参照が同じものを変更したときに健全性が壊れる
code:ts
const x: { readonly a: number } = { a: 42 }
const y: { a: number } = x
y.a = 10
console.log(x) // { a: 10 } 変更されてるし、no error
そうだね