TypeScript之简单练习

163 阅读1分钟

以下练习来源于TypeChallenges

Pick

type Pick<T, U extends keyof T> = {
  [k in U]: T[k]
}

Readonly

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

Tuple to Object

type TupleToObject<T extends readonly string[]> = {
    [k in T[number]]: k
}

First of Array

type FirstOfArray<T extends any[]> = T extends [] ? never : T[0]

Length of Tuple

type LengthOfTuple<T extends readonly any[]> = T['length']

Exclude

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

Awaited

type Awaited<T extends Promise<any>> = 
    T extends Promise<infer U>
        ? U extends Promise<any>
            ? Awaited<U> : U
         : never   

If(三元运算)

type MyIf<C extends boolean, T, F> = C extends true ? T : F

Concat

type MyConcat<T extends any[], U extends any[]> = [...T, ...U]

Includes

type MyIncludes<T extends any[], U> = 
    T extends [infer First, infer Rest]
        ? Equal<First, U> extends true
            ? true : MyIncludes<Rest, U>
        : false

Push

type MyPush<T extends any[], U> = [...T, U]

Unshift

type MyUnshift<T extends any[], U> = [U, ...T]

Parameters

type MyParameters<T extends (...args: any[]) => any> = T extends (...args: infer U) => any ? U : never 

以上全部内容,如有疑问,欢迎指正。Good Luck!

12.webp