1.Pick
type myPick< T , K extends keyof T > = { [ key in K ] : T [ key] }
2.Readonly
type myReadonly< T > = {
readonly [ key in keyof T ] : T [ key]
}
3.Tuple to Object
const tuple = [ 'a' , 'b' , 'c' ]
type TupleToObject< T extends readonly PropertyKey[ ] > = {
[ P in T [ number ] ] : P
}
type resTuple = TupleToObject< typeof tuple>
4.First Of Array
type First< T extends any [ ] > = T extends [ ] ? never : T [ 0 ]
5.Length of Tuple
type LengthOfTuple< T extends readonly any [ ] > = T [ 'length' ]
6.Exclude
type MyExclude< T , U > = T extends U ? never : T
type Result = MyExclude< 'a' | 'b' | 'c' , 'a' >
6.PickPartial
interface User {
id: number ;
age: number ;
name: string ;
} ;
type PickPartial< T , K extends keyof T > = Partial< Pick< T , K >> & Omit< T , K >
type Result = PickPartial< User, 'id' >
7.Awaited
type MyAwaited< T extends PromiseLike< any | PromiseLike< any >>> = T extends PromiseLike< infer P > ?
P extends PromiseLike< any > ? MyAwaited< P > : P : never
8.If
type MyIf< F extends boolean , T , K > = F extends true ? T : F extends boolean ? K : never
9.Concat
type MyConcat< T extends readonly unknown [ ] , K extends readonly unknown [ ] > = [ ... T , ... K ]
10.Includes
type MyIncludes< T extends any [ ] , K > = {
[ key in T ] : T [ key]
} [ K ] extends true ? true : false
11.Push
type MyPush< T extends readonly unknown [ ] , U > = [ ... T , U ]
12.Unshift
type MyPush< T extends readonly unknown [ ] , U > = [ U , ... T ]
13.Parameters
type MyParameters< T extends ( ... args: any [ ] ) => unknown > = T extends ( ... args: infer S ) => unknown ? S : never