type-challenges 19日目:20-Promise.all
問題 & 解答
PromiseAllに型をつける。
declare function PromiseAll<T extends any[]>(values: readonly [...T]): Promise<{ [P in keyof T]: T[P] extends Promise<infer R> ? R: T[P]}>問題文にもありますが、PromiseAllの戻り値の型はPromise<T>で、引数の型は配列です。as constが使用されているケースがあるので、ここまでで
declare function PromiseAll<T extends any[]>(values: readonly [...T]): Promise<T>こういう感じです。あとはどっかの回でやった再帰的なやつにやや近いですが、TがPromiseだった場合にはそれを解除してやる必要があるので、mappedTypesとinferキーワードを使って最終的にはこうなります。
declare function PromiseAll<T extends any[]>(values: readonly [...T]): Promise<{ [P in keyof T]: T[P] extends Promise<infer R> ? R: T[P]}>感想
眠いです笑