[TypeScript]Partialについて、実際に実装して理解する。
TypeScriptの既存の型から全てのプロパティをOptional
にして新たな型にするPartial
というものがある。
今回はこれを自力で実装しながらPartial
について理解することを目的とする。
Partialとは
Partial
とは以下の書式を持つ組み込み型で、ジェネリクスに指定したプロパティの全てをOptional
にしてくれるものです。
なお、Partial
ではネストされたプロパティについてはOptional
には出来ません。
今回はこれを実装して理解していきます。
すなわち以下のMyParcial
を実装していきます。
MyPartialの実装方針
MyPartial
を実装するにあたって、以下の方針で段階を踏んで実装していきます。
MyPartial<T>
に指定されたプロパティのキーを羅列する- それぞれのキーに対して、Tの型を設定する。
- 羅列されたプロパティを全て
Optional
にする
では順に見ていきましょう
MyPartialに指定されたキーを羅列する
プロパティのキーを羅列するにはkeyof
を使用します。
そのため、T
のキーを羅列するには以下のようにすることで可能です。
ただ、これだけではキーを羅列しただけで、キーに対する方を設定することが出来ません。
次にこの型を設定していきます。
それぞれのプロパティのキーに対して、Tの型を設定する。
TypeScriptにはMapped Types
と呼ばれる、元の型に基づいて新しい型を作成可能な仕組みがあります。
これを用いて、Tの型を設定していきます。
以下はMapped Types
を用いて、User
のプロパティのキー全てに対してString
を設定した例です。
このString
の部分を元のプロパティの型に設定してあげれば良さそうですね。
これは以下のようにすることで可能です。
T[K]
とすることで、上記の例だと、id: User["id"]
, name: User["name"]
を設定しているのと同等となります。
これで、だいたい完成ですね。
後は、それぞれのプロパティをOptional
にするだけです。
羅列されたプロパティを全てOptionalにする
これは簡単ですね。
それぞれのプロパティをOptional
にするだけなので、以下で実現可能です。
これで完成です。
まとめ
今回はPartial
の実装を順を追って実装していきました。
理解出来ましたでしょうか?
いきなり最終形を見せられても順を追っていくことで理解出来ると思います。
ちなみにRequired
と呼ばれる組み込み型もありますので、この記事を参考に実装してみてください。