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];
T
は『type』に当てはまる必要があるのでstring
に設定。U
がユニオン型でも問題無いように判定処理をT
をキーとするオブジェクト内に内包させ、最後に[T]
とすることで結果の型定義を取得する。
U
がユニオン型だと、判定処理の結果合致するのがどちらか片方だけだとしても、もう片方がnever
に分類されないため。U
が『type: string(T)』を持つオブジェクトなら、Uを返却する。Solution by Yasunori-aloha #32881
type LookUp<U ,T> = U extends {type:T} ? U : never;
Solution by bananana0118 #32751
type LookUp<Animal, N> = Animal extends infer A extends { type: string }
? A['type'] extends N ? A : never
: never
Solution by ZhulinskiiDanil #32674
interface UnionType {
type: string;
}
type LookUp<U extends UnionType, T extends U["type"]> = U extends UnionType
? U["type"] extends T
? U
: never
: never;
Solution by keyurparalkar #32487
처음 풀이
type LookUp<U extends { type: string }, T extends U['type']> =
U extends unknown
? { [K in T]: U['type'] extends K ? U : never }[T]
: never
더 간결한 풀이
type LookUp<U extends { type: string }, T extends U['type']> =
U extends { type: T }
? U
: never
Solution by dev-hobin #32363
type LookUp<
T extends {
type: string;
},
K extends T["type"]
> = T extends { type: K } ? T : never;
Solution by QuocCao-dev #31916
// your answers
type LookUp<U, T> = U extends {type: T} ? U:never;
Solution by pea-sys #31888
type LookUp<U, T> = U extends { type: T } ? U : never;
Solution by kai-phan #31624
type LookUp<U extends {type : string}, T extends U['type']> = U extends { type : T } ? U : never;
Solution by jinyoung234 #31583
// your answers
type LookUp<T extends { type: string }, K> = T extends { type: K } ? T : never;
Solution by AhmedRagabKamal #31494
type LookUp<U extends Animal, T> = U extends {type: infer A} ? T extends A ? U : never : never
Solution by vipulpathak113 #31416
type LookUp<U extends { type: string, [key: string]: any }, T extends U['type']> = U extends { type: T, [key: string]: any } ? U : never
Solution by eward957 #31227
// your answers
type LookUp<U, T> = U extends {type: T } ? U : never;
Solution by chliguiy #31012
type LookUp<U, T> = U extends {type: T} ? U : never;
Solution by MyeonghoonNam #30972
type LookUp<U extends { type: string }, T extends U['type']> = U extends { type: T } ? U : never
Solution by VladSt90 #30670
type LookUp<U extends Record<string, any>, T extends U['type']> = U extends { type: T } ? U : never;
Solution by n0hack #30647
type LookUp<U, T> = Extract<U, { type: T }>["type"] extends T
? Extract<U, { type: T }>
: never;
type cases = [
Expect<Equal<LookUp<Animal, "dog">, Dog>>,
Expect<Equal<LookUp<Animal, "cat">, Cat>>
];
Solution by WanderedToLa #30581
type LookUp<K, T> = K extends {type : T} ? K : never;
Solution by hskwon5170 #30533
// 你的答案
enum Attribute { type = 'type' }
type LookUp<U, T> = U extends {[Attribute.type]: T} ? U : never
Solution by fyuanz #30193
// your answers
type LookUp<U, T> = U extends {type: T} ? U : never
Solution by kerolossamir165 #30085
type LookUp<U extends {type: string}, T extends U['type']> = U extends {type: T} ? U : never
Solution by Bygaga63 #29910
type LookUp<U extends { type: string, [key: string]: any}, T extends U['type']> = Extract<U, {type: U['type'] & T}>
Solution by julianfere #29864
type LookUp<U, T> = U extends {type: T} ? U : never
Solution by sv-98-maxin #29830
type LookUp<U, T> = U extends { type: T } ? U : never
Solution by codeshareman #29794
type LookUp<T, U> = T extends {type: U} ? T : never;
Solution by bjnslv #29779