타입스크립트

Built-in 제네릭 타입 직접 구현해보기

kk지모 2023. 11. 27. 23:50
Collection of TypeScript type challenges with online judge

Pick

type MyPick<T, K extends keyof T> = { [k in K]: T[k] }

Readonly

type MyReadonly<T> = { readonly [k in keyof T]: T[k] }

Exclude

type MyExclude<T, U> = T extends U ? never : T

Awaited

type MyAwaited<T> = T extends PromiseLike<infer I> ? I extends PromiseLike<any> ? MyAwaited<I> : I : never

Parameters

type MyParameters<T extends (...args: any[]) => any> = T extends (...arg: infer I) => any ? I : any;

ReturnType

type MyReturnType<T extends (...args: unknown[]) => unknown> = T extends (...arg: unknown[]) => infer I ? I : never;

Omit

type MyOmit<T, K> = { [t in keyof T as t extends K ? never : t]: T[t] }

 


끝!

타입스크립트 Conditional Types에 익숙해지자