実現したいこと
下記のような処理があるとします。
typescript
1const tuple = [ 2 {value: "a"}, 3 {value: "b"}, 4 {value: "c"}, 5] as const; 6 7const mappedTuple = tuple.map(e => e.value);
このとき、mappedTuple
の型は["a", "b", "c"]
ではなく("a" | "b" | "c")[]
となります。
これを、["a", "b", "c"]
で返すようなガード関数を作成したいのですが、なかなか上手く行っていません。
typescript
1// こういうのを作りたい 2const mapOfTuple = (tuple, callbackFn) => { 3 // map(と同様の)処理 4}; 5 6const mappedTuple2 = mapOfTuple(tuple, e => e.value); 7// 型が`["a", "b", "c"]`になる!
これを、タプルの要素数(大きさ)が任意長の場合にも適用できるようにしたいのです。
お知恵をお借りしたく、よろしくお願いいたします。
追記:
{value: "a"}
のようなオブジェクトはあくまでも一例になり、実際はあらゆる値で成り立つようにと考えております。
typescript
1// 例えばこのようケースも 2const tuple: [number[], string[]] = [ 3 [1, 2, 3], 4 ["a", "b", "c"], 5]; 6 7const mappedTuple = mapOfTuple( 8 tuple, 9 e => e.reduce((acc, val) => acc + val), 10); // [number, string]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/08/01 01:32
2024/08/01 10:09