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