メインコンテンツまでスキップ

Readonly<T>

Readonly<T>は、オブジェクトの型Tのプロパティをすべて読み取り専用にするユーティリティ型です。

Readonly<T>の型引数

T

型引数Tにはオブジェクトの型を代入します。

Readonlyの使用例

ts
type Person = {
surname: string;
middleName?: string;
givenName: string;
};
type ReadonlyPerson = Readonly<Person>;
type ReadonlyPerson = { readonly surname: string; readonly middleName?: string | undefined; readonly givenName: string; }
ts
type Person = {
surname: string;
middleName?: string;
givenName: string;
};
type ReadonlyPerson = Readonly<Person>;
type ReadonlyPerson = { readonly surname: string; readonly middleName?: string | undefined; readonly givenName: string; }

上のReadonlyPersonは次の型と同じになります。

ts
type ReadonlyPerson = {
readonly surname: string;
readonly middleName?: string;
readonly givenName: string;
};
ts
type ReadonlyPerson = {
readonly surname: string;
readonly middleName?: string;
readonly givenName: string;
};

Readonlyの効果は再帰的ではない

Readonly<T>が読み取り専用にするのは、オブジェクトの型T直下のプロパティのみです。プロパティがオブジェクトだった場合、それが持つプロパティまでは読み取り専用にならないので注意してください。

Readonlyの実装

Readonly<T>は次のように実装されています。

ts
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
ts
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};

関連情報