TypeScript2.1からUtility Types(便利な関数のような型のこと)という機能が提供されています。PartialやRequired、ReadOnlyはそのうちの一つです。
Partialとは?
下記のようにPartialという構文を使用して型を作るとジェネリクスで指定した型を動的にオプション型にすることが可能です。
1 2 3 4 5 6 |
type Person = { name: string; age: number; } type PertialType = Partial<Person>; |
実際PertialTypeの中身を見てみると下記のように全てがオプションになっています。
1 2 3 4 |
type PertialType = { name?: string | undefined; age?: number | undefined; } |
注意点
ネストされていて階層のあるオブジェクトでは対応しておらず適用したとしてもコンパイルエラーになってしまうのであくまで階層のないオブジェクトにしか使えないです。
Required
Partialとは逆に全てが必須になっている型を作りたい場合はRequiredという構文を使えば動的に生成することが可能です。
1 2 3 4 5 6 |
type Person = { name: string; age?: number; } type RequiredPerson = Required<Person>; |
Partial、Requiredのメリット
下記のように手動でオプション型を別途用意する場合に比べてコードの保守性が上がります。
1 2 3 4 5 6 7 8 9 |
type Person = { name: string; age: number; } type Person2 = { name?: string; age?: number; } |
ReadOnlyとは?
1 2 3 4 5 6 7 |
type aaa = { b: string; c: string; }; const ddd: Readonly<aaa> = { b: 'bbb', c: 'ccc' }; ddd.b = 'newBBB'; // Error: Attempt to assign to const or readonly variable |
プロパティを読み取り専用にすることができます。一度代入したら絶対に値を変更することができなくできるので固定値や定数の目的でも使えそうですね。
この記事へのコメントはありません。