以下练习来源于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!