Skip to content
On this page

type-challenges

Easy

  1. MyPick
ts
type MyPick<T, K extends keyof T> = { [P in K]: T[P] }
  1. MyReadonly
ts
type MyReadonly<T> = { readonly [P in keyof T]: T[P] }
  1. TupleToObject
ts
type TupleToObject<T extends readonly PropertyKey[]> = { [P in T[number]]: P }

T[number] :indexed access types
4. First

ts
type First<T extends any[]> = T extends [] ? never : T[0]
  1. Length
ts
type Length<T extends readonly any[]> = T['length']
  1. MyExclude
ts
type MyExclude<T, K> = T extends K ? never : T
  1. MyAwaited
ts
type MyAwaited<T> = T extends Promise<infer one> ? one : never
  1. ExampleType
ts
type ExampleType = Promise<string>
  1. If
ts
type If<C extends boolean, T, F> = C extends true ? T : F
  1. Concat
ts
type Concat<T extends any[], K extends any[]> = [...T, ...K]
  1. Includes
ts
type Includes<T extends readonly unknown[], U> = U extends T[number] ? true : false
  1. Push
ts
type Push<T extends any[], P> = [...T, P]
  1. Unshift
ts
type Unshift<T extends any[], P> = [P, ...T]

Medium

  1. MyReturnType
ts
type MyReturnType<T> = T extends (...args:any[])=>infer R?R:never
  1. My Omit
ts
type MyExclude<T,K> =  T extends K?never:T
type MyOmit<T,P extends keyof T> = {
    [K in MyExclude<keyof T,P>]:T[K]
  } 
  1. MyReadonly2
ts
type MyReadonly2<T,K extends keyof T = keyof T> = {
 readonly [P in  K]:T[P]
}&{ [S in MyExclude<keyof T,K>] :T[S]   }