数组类型的模式匹配
pop
type Pop<T extends unknown[]> = T extends [...Rest,infer R]? [...Rest] : never;
type res = Pop<[1,2,3]>;
shift
type Shift<T extends unknown[]> = T extends [infer R,...Rest]?[...Rest]:never
type res = Shift<[1,2,3]>;
字符串类型的模式匹配
trim
type TrimeLeft<T extends string> = T extends `${''|'\n'|'\t'}${infer Rest}`? TrimLeft<Rest>:Str
type TrimeRight<Str extends string> = Str extends `${infer Rest}${''|'\n'|'\t'}`? TrimRight<Rest>:Str
type Trim<Str extends string> = TrimRight<TrimLeft<Str>>
type res = Trim<' abc '>;
replace
type Resplace<Str extends string,From extends string,To extends string> = Str extends `${infer Left}${From}${infer Right}`?`${Left}{To}{Right}`:Str
type res = Replace<"我是最棒的","最棒","超棒">
函数类型的模式匹配
参数类型
type GetParams<Func extends Function> = Func extends (...params:infer Params)=>any?Params:never
返回值
type GetReturnType<Func extends Function> = Func extends (...params:any)=>infer R?R:never