TypeScript 4.5でAwaited
タイプが入りました。
// A = string
type A = Awaited<Promise<string>>;
// B = number
type B = Awaited<Promise<Promise<number>>>;
// C = boolean | number
type C = Awaited<boolean | Promise<number>>;
あれ、これって自作できそうな気もします。
type MyAwaited<T> = T extends Promise<infer R> ? MyAwaited<R> : T
これだけでいいのでは?
TypeScript Playgroundで確認、いい感じ。
実際のコードを覗いてみることにしました。
PromiseLikeと非strictNullChecksに対応している以外は基本同じ様子。もっと魔法のようなことをやっているかと思ってました。
これならdownlevel-dtsでも対応できるのではないでしょうか(最近アクティブじゃなさそう)。
以上、小ネタでした。