00062-medium-type-lookup

Back

// your answers

Solution by tungulin #36731

type LookUp<U, T> = U extends { type: infer C } ? C extends T ? U : never : never

Solution by tungulin #36730

type LookUp<U extends { type: string }, T extends string> = {
  [K in U['type']]: Extract<U, { type: T }>
}[T]

Solution by Mori-Yang #36689

// 你的答案

type LookUp<U extends {type:string,[props:keyof any]:any}, T extends U['type']> = U extends {type:T} ? U : never;

Solution by zhaohuaishuai #36648

type LookUp<U, T> = U extends { type: T } ? U : never

Solution by asylbekduldiev #36499

type LookUp<U, T> = U extends {type: T} ? U : never;

Solution by gangnamssal #35559

type LookUp<U, T> = U extends {type: T} ? U : never

Solution by RanungPark #35484

type LookUp<U, T> = U extends any 
? true extends {[K in keyof U]: U[K] extends T ? true : false}[keyof U] ? U : never
: never

Solution by lxxorz #35345

type LookUp<U, T> = U extends { type: T } ? U : never;

Solution by IsaacYouKorea #35216

// ============= Test Cases =============
import type { Equal, Expect } from "./test-utils";

interface Cat {
  type: "cat";
  breeds: "Abyssinian" | "Shorthair" | "Curl" | "Bengal";
}

interface Dog {
  type: "dog";
  breeds: "Hound" | "Brittany" | "Bulldog" | "Boxer";
  color: "brown" | "white" | "black";
}

type Animal = Cat | Dog;

type cases = [
  Expect<Equal<LookUp<Animal, "dog">, Dog>>,
  Expect<Equal<LookUp<Animal, "cat">, Cat>>,
];

// ============= Your Code Here =============
// type LookUp<
//   U extends { type: string; [key: string]: any },
//   T extends U["type"],
// > = T extends  U["type"]? U : never;
type LookUp<
  U extends { type: string; [key: string]: any },
  T extends U["type"],
> = U extends U ? (T extends U["type"] ? U : never) : never;
// type LookUp<U, T> = U extends {type: T} ? U : never

Solution by baixiaoyu2997 #35156

type LookUp<U extends { type: string }, T extends string> = U extends { type: T } ? U : never

Solution by eunsukimme #35134

type LookUp<U, T> = U extends { type: U }  ? U : never;

Solution by raeyoung-kim #35014

// 여기 풀이를 입력하세요
type LookUp<U, T> = U extends { type: T } ? U : never;

Solution by LeeKangHyun #34913

type LookUp<U, T> = U extends { type: T } ? U : never

Solution by HrOkiG2 #34906

// your answers
type LookUp<U, T> = U extends { type: T } ? U : never;

Solution by zeyuanHong0 #34834

type LookUp<U, T> = U extends { type: T } ?  U : never;

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

interface Cat {
  type: 'cat'
  breeds: 'Abyssinian' | 'Shorthair' | 'Curl' | 'Bengal'
}

interface Dog {
  type: 'dog'
  breeds: 'Hound' | 'Brittany' | 'Bulldog' | 'Boxer'
  color: 'brown' | 'white' | 'black'
}

type Animal = Cat | Dog

type cases = [
  Expect<Equal<LookUp<Animal, 'dog'>, Dog>>,
  Expect<Equal<LookUp<Animal, 'cat'>, Cat>>,
]

Solution by EvgeniyKoch #34649

type LookUp<
  U extends { type: PropertyKey },
  T extends PropertyKey
> = U extends {type: T} ? U : never

Solution by binhdv155127 #34643

type LookUp<U, T> = U extends {type: T} ? U : never;

Solution by devshinthant #34570

type lookup<T extends {} , U> = T extends {type:U}?T:never

Solution by danish-mehmood #34376

// 你的答案

type LookUp<U, T> = U extends { type:T } ?U:never

Solution by W-fitTiger #34257

// Cat | never | never = Cat
type LookUp<U, T> = U extends { type: T } ? U : never

Solution by ouzexi #33992

type AnimalType = 'dog' | 'cat'
type LookUp<T extends { type: AnimalType }, K extends AnimalType> = Extract<T, { type: K }>

Solution by Danny101201 #33843

type LookUp<U extends { type: any }, T> = U extends { type: T } ? U : never

Solution by laplace1009 #33720

type LookUp<T extends Record<'type', string>, K> = T extends any
  ? T['type'] extends K
    ? T
    : never
  : never

Solution by Flavour86 #33456

type LookUp<T, U> = T extends { type: U } ? T : never

Solution by Tubring25 #33297

-->

type LookUp<U extends { type: PropertyKey }, T extends PropertyKey> = {
  [P in T]: U extends { type: P } ? U : never }[T]

Solution by Taneros #33043

type LookUp<U extends { type: string }, T extends U['type']> = U extends { type: T } ? U : never;

Solution by dimitriiy #33004

type LookUp<U extends { type: string }, T extends U["type"]> = U extends {
  type: T;
}
  ? U
  : never;

Solution by CAN1177 #32947

// 解答をここに記入
type LookUp<U, T extends string> = {
  [Key in T]: U extends { type: T }
    ? U
    : never
}[T];

Solution by Yasunori-aloha #32881

type LookUp<U ,T> = U extends {type:T} ? U : never;

Solution by bananana0118 #32751