みなさん、タプルを map()
にかけると戻り値が普通の配列型になることをご存じでしょうか?
Promise.allSettled()
で複数の API を並列実行し、成功なら value
、失敗なら null
に変換しようとした際にこの落とし穴にハマりました。 TypeScript の実装で map()
の戻り値は常に U[]
になるように型定義されているため、タプル長と要素型が失われてしまうのです。
そこでタプルを map() にかけても返り値をタプルにするために、mapped type と Awaited を組み合わせ、引数に渡したタプル型から戻り値の型を動的に生成し、map() 後でもタプル型を維持する関数をつくりました。
今回はその工夫の詳しい内容を共有します!Typescript で開発されている方にはお役に立てると思います!!