タプルを map() にかけると戻り値が普通の配列型になったので、タプルの型を保持してくれる関数を作った by みんちゃん

フロントエンドカンファレンス北海道2025
LT(5分)

タプルを map() にかけると戻り値が普通の配列型になったので、タプルの型を保持してくれる関数を作った

gardensky511 みんちゃん gardensky511
1

みなさん、タプルを map() にかけると戻り値が普通の配列型になることをご存じでしょうか?

Promise.allSettled() で複数の API を並列実行し、成功なら value、失敗なら null に変換しようとした際にこの落とし穴にハマりました。 TypeScript の実装で map() の戻り値は常に U[] になるように型定義されているため、タプル長と要素型が失われてしまうのです。

そこでタプルを map() にかけても返り値をタプルにするために、mapped type と Awaited を組み合わせ、引数に渡したタプル型から戻り値の型を動的に生成し、map() 後でもタプル型を維持する関数をつくりました。

今回はその工夫の詳しい内容を共有します!Typescript で開発されている方にはお役に立てると思います!!