TypeScriptである型の部分型であることを保証する型定義
言い換えると、あるオブジェクトAに存在するプロパティが、あるオブジェクトBに生えているプロパティのいずれかに該当することを保証し、かつどのプロパティが生えてるかは自由、という感じにしたい。
追記:
id:nanto_vi さんに教えていただいたのですが、組み込みで Partial
という型があり、基本的にはこちらを使えば良さそうです。
TypeScript: Documentation - Utility Types
以下中身がどうなっているかなど
keyofとMapped Type使えばなんかできそうだなーと思いつつも
type PartialObjectOf<T> = { [P in keyof T] : T[P] }
こんな風に書くと結局全てのプロパティを持っていないといけないし、どうすればスマートに書けるかなーと思っていた。
実際にはこう書けば良い
type PartialObjectOf<T> = { [P in keyof T]? : T[P] }
要はプロパティがoptionalであることを示せばよいわけですね。
ちなみに一部のプロパティが確実にあることを保証したい場合は以下のように交差型を使用すればよいです。
type PartialObjectOf<T> = { [P in keyof T]? : T[P] } & { prop: string }