#getting value from Tuple

9 messages · Page 1 of 1 (latest)

proper ember
#

I am trying to given a tuple array and a “key” value get its corresponding value, ie:
given

 type Tuple = [“name”, “juan”] | [“email”, “a@a.com”] | [“age”, 30];

I try to get 'juan' from the key 'name' as follows:

type zzz<K extends string> = Tuple extends infer U extends [string, any]
    ? K extends U[0]
        ? U[1]
        false //U[0] extends K ? U[1] : never
    : never;

type T1 = zzz<“name”>; // 30 | “juan” | “a@a.com”
type T2 = zzz<“email”>; // 30 | “juan” | “a@a.com”
type T3 = zzz<“age”>; // 30 | “juan” | “a@a.com”
type T4 = zzz<“unknown”>; // never;

however, I can't get just the exact value I'm looking for.

#

!helper

tacit ferryBOT
#

:warning: Please wait a bit longer. You can ping helpers <t:1736358142:R>.

open wing
#

@proper ember You can use Extract

tacit ferryBOT
#
type Tuple = ["name", "juan"] | ["email", "a@a.com"] | ["age", 30];
type ExtractField<Field extends Tuple[0]> = Extract<Tuple, [Field, unknown]>[1]
type Name = ExtractField<"name">
//    ^? - type Name = "juan"
proper ember
open wing
#

It works with any, too.

tacit ferryBOT
#
type Tuple = ["name", "juan"] | ["email", "a@a.com"] | ["age", 30];
type ExtractField<Field extends Tuple[0]> = Extract<Tuple, [Field, any]>[1]
type Name = ExtractField<"name">
//    ^? - type Name = "juan"
proper ember
#

you are right, thanks again!