Consider a tuple like this:
type MyTuple = [A, B];
where A and B both have an attribute named key. For instance,
interface A = {
key: 'sandwiches'
}
interface B = {
key: 'pasta'
}
I desire the following interface:
interface Result {
sandwiches: A;
pasta: B;
}
Is there a way to do this dynamically?
I'm thinking that, if this is achievable, it might look something like:
type MapTuple<T> = {
[K in keyof T]: T[K]["key"]
}
but this doesn't work.
This question is the inverse of Typescript: object type to array type (tuple)
This will produce the desired effect. You need to map over all the key properties of the tuple and extract the tuple member for each key :
type MyTuple = [A, B];
interface A {
key: 'sandwiches'
}
interface B {
key: 'pasta'
}
type MapTuple<T extends Array<{ key: string }>> = {
[K in T[number]['key']]: Extract<T[number], { key : K}>
}
type R = MapTuple<MyTuple>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With