Typescipt 模式匹配

27 阅读1分钟

数组类型的模式匹配

pop

type Pop<T extends unknown[]> = T extends [...Rest,infer R]? [...Rest] : never;

type res = Pop<[1,2,3]>;//[1,2]

shift

type Shift<T extends unknown[]> = T extends [infer R,...Rest]?[...Rest]:never

type res = Shift<[1,2,3]>;//[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   '>;//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