模板字面量递归推理:在字符串解析中实现自定义模式匹配解析器
利用 Typescript 4.1+ 的模板字面量类型与条件类型的递归,在类型级别解析结构化字符串,例如解析路由参数或 DSL。 · 难度:入门 · +10XP
模板字面量递归推理:在字符串解析中实现自定义模式匹配解析器
模板字面量类型可以拆解字符串,并与条件类型递归结合,构建纯类型的解析器。比如将路径字符串如 '/user/:id/post/:postId' 解析为参数对象类型 {id: string, postId: string}。通过 infer 捕获占位符以及递归处理剩余部分,可以在编译期完成字符串模式识别,广泛用于类型安全的路由库。
type ParseRouteParams<T extends string> =
T extends ${infer _Start}/:${infer Param}/${infer Rest}
? { [K in Param | keyof ParseRouteParams<Rest>]: string }
: T extends ${infer _Start}/:${infer Param}
? { [K in Param]: string }
: {};
type UserPostParams = ParseRouteParams<'/user/:id/post/:postId'>;
// type UserPostParams = { id: string; postId: string }