4️⃣

[TypeScript UtilityTypes] Readonly

2024/01/04に公開

TypeScript入門メモ
[Utility Types] Readonly について

Readonly

公式ドキュメント
https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype

Typeのすべてのプロパティがreadonlyに設定された型を構築する。

interface Todo {
  title: string;
}
 
const todo: Readonly<Todo> = {
  title: "Delete inactive users",
};
 
todo.title = "Hello";
// Cannot assign to 'title' because it is a read-only property.

このユーティリティは、実行時に失敗するような代入式を表すのに便利(例えば、フリーズしたオブジェクトのプロパティを再代入しようとするとき)

// Object.freeze
function freeze<Type>(obj: Type): Readonly<Type>;

使い所

イミュータブルなオブジェクトの作成:
Readonlyはオブジェクトをイミュータブル(変更不可)にするのに役立つ。

APIレスポンスの保護:
外部APIからのレスポンスデータを扱う際、これらのオブジェクトを読み取り専用にすることで、誤ってデータを変更することを防ぐことができる。

関数の引数の保護:
関数にオブジェクトを渡す際にReadonlyを使用することで、その関数内でオブジェクトが変更されないことを保証できます。これにより、予期せぬ副作用を防ぐことができる。

まとめ

基本的にイミュータブルによるメリットを記述したが、これは個人的にはすごく重宝しそうな機能だと思う。

Discussion