Record型とは?
Mapped Typesを扱うUtility Typesの一つで、入れ子になっているオブジェクトの型定義をすっきり書くためのものです。TypeScript2.1で追加されました。
構文
1 |
Record<K,T> |
K
ユニオン型のデータを持たせてあげます。(例:'apple' | 'peach' | 'strawberry'のような型のことです。)
T
入れ子になっているオブジェクトの内側のオブジェクtのデータ型を指定します。
例
1 2 3 4 |
interface Person { name: string; age: number; } |
注意点としては、Record型はそこまで厳密ではないので、上記のPersonとかで定義されていないキーにもアクセスができてしまいます。(例:ageなど)その場合はundefinedになります。
用途
例えば、下記のようにオブジェクト型の中にオブジェクト型をいくつか格納するケースがあった場合に内側のオブジェクトの型定義をしたい場合は一つ一つ同じ型表記を何度も繰り返さないといけません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
interface Person { name: string; age: number; } const member:{ one:Person, two:Person, three:Person, four:Person, } = { one: { name:'taro',age:12 }, two: { name:'hanako',age:15 }, three: { name:'saburo',age:18 }, four: { name:'siro',age:17 }, } |
このように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
interface Person { name: string; age: number; } type members = 'one' | 'two' | 'three' | 'four' const member:Record<members,Person> = { one: { name:'taro',age:12 }, two: { name:'hanako',age:15 }, three: { name:'saburo',age:18 }, four: { name:'siro',age:17 }, } |
同じような記述がなくなってすっきり書き直すことができました。
この記事へのコメントはありません。