#How to Restrict a Union Literal Type to One of the Literal Type

5 messages · Page 1 of 1 (latest)

opaque merlin
#

I want to create a type predicate so that when I use filter on array of Union of generics, it would return the correct type.
I have an array converterGroups: (ConverterGroup<"text">|ConverterGroup<"image">)[], I'd like find() to return type ConverterGroup<"text"> if the converterGroup's id is also "text".
Here is the [Typescript Playground][1]
[1]: https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBDAnmYcDCEB2A3Ys8DiUEArmAJIAmAKhAGImYDGcAvHAN4BQcCoMALjgBtAM4woAS0wBzADRxxU2QF0ecSQFsAhjOBDhdSQBtgCpdJlqAvly6hIsBMlQYceGIWJkqbOAGtgRAgAM3QsXHwoIlIKGnpGJntwaHgkFDgAVUxJLAB5EIJgTDxJJgAeamzczDh YspRcPcomJ9KAD4-DhEAaQ1aqpysFSE3SM9o7zBy3q7rYSGatXTXCI8vWOqsP23MAqKSqQrxjanYqg67B1TnDNOotxDJGW71JnXW6dExz8m2sB7YQ2a4pJyrZoTTZkSp1ECeTCNSFnAGXN68SSUITUdQwSQwUxCCyydRgXTAH7IqIABXJ5Qe-2mVFoDGYixUwgADCoFAzoXEWYl2cIAIwqDrAri2ZKONIuKmTWl6SrkTBgEgwBTUPIa9UwLrsbgYrGKCSWXH4wmm5QydSiEgAIzxBOAAH4iWaSbwPi1JpS VAMJpICVMDAVWqNVqdTA9RKQTLbhCA0GQ8Vw9RVXro7qNQbOOpMNpNPprZYANzvP6sphCAAUlMzkZgAEo2F1tbmYJXpTdwfKAMqO0RMKRgPFYanGbS1Q2F4ul4m23iUCmjyTjmoem12s0oanHYBUbfm3tg AhRIT2qSUQBgGw qIpr3pmdOs qHndrYttGuBQMAMAkFAtQfn8-K-L6-J7C2Qifii0waC EHfjM1AGl0-68IBwGgXACFfLEAB0mJsKw7CEYyFyUJWvC2NKdigrKBFYOIrHQYGWDPDIUFfk8LzohxX4ApSwjqLw2G8BoJoAESePCslyBJ0nOlasnUPwCAQHAmmKcp0nSWSehiSphlSYZxpCLJDraKIwAAGwACxKWZllqaWskAEJ2Y5TlwAAoswECrlAAD0AAiwAfKFrmWZZVF4KZ8XxRZKW8EWJbWT59nOYFwWxQZ6UJdWiQnrItA5X5bnxdYRXFQWDWGZlnlVXlUUxXgcVNd6pXMEItm5U5tADp6y5NXVNXSWo6W2PFM3SZN5luZi1laOS3WGR51nkDoejabp-CbUZ5LJSlaWGatcA2b5znHfF23XW1-lBZ1UD3SVnFnQ1F0pS12W3S9BVdfVTVUTWQiUCQmiaIgRimCNY1TYZS3FQttWg7w6NwHNcA8lKdg uxxkUn4iVcZgPHEeTonEc8iJ1rer6xHW8lHS2LausRJOiJWiZOJezDXnAUMw3DJjAIjNp1iEQjw8AcFlrIjUAUBIG1AA5BrBP8xeV41ErMiVYDdbQC80jaMYo02uVMh-lWmDsSQ0gwAAHAAglAUDaIgfglAA7od8KvSFeB1i2xHFJ1ptSDIFtW2NLZ0Rx7EOtI1uWH4GeyHTxCaBgq7UhALt1sRZee97iC5xAmh1s7YYe17Psc8nuHq3AToQNodZp5g2d2z2zG3ILTDC4NflS5YPeA-3tv271jvwL3-d NoMAQA609Df3ScO07LuN5XuwHxXPvV7Xy9jQodaaG2rBdJo1Oh0XLvuzAdaci2ACEu84Wr EByDjADqocoDh2IquaO9c3an0QLvawQA

mighty houndBOT
#

@opaque merlin Here's a shortened URL of your playground link! You can remove the full link from your message.

siacespark#0
mighty houndBOT
#
punybody#0

Preview:```ts
export type ConverterGroupIdToFunc = {
text: [string, string]
image: [File, string]
}

export type ConverterGroupId =
keyof ConverterGroupIdToFunc
export type UnionOfGeneric<
TUnion extends ConverterGroupId

= {
[K in TUnion]: ConverterGroup<K>
}[TUnion]
...```

opaque merlin
#

!resolved

#

Yes thank you and it works! Could you explain what does that mean if possible?