模板字面量驱动的条件类型推理引擎
利用模板字面量类型结合infer关键字,从字符串模式中精确提取并转换类型信息。 · 难度:入门 · +10XP
模板字面量驱动的条件类型推理
TypeScript 4.1+的模板字面量类型可以配合条件类型的infer关键字,从字符串类型中解析出结构化数据。例如从路径字符串提取参数、从CSS类名提取状态。本教程演示如何写一个类型级别的路由器:ExtractRouteParams<'/user/:id/post/:postId'> 推断出 { id: string; postId: string }。核心是利用递归模板匹配与infer,构造出联合类型与对象类型之间的转换器,实现类型安全的URL解析。
type ExtractRouteParams =
T extends ${infer _Start}:${infer Param}/${infer Rest}
? { [K in Param | keyof ExtractRouteParams]: string }
: T extends ${infer _Start}:${infer Param}
? { [K in Param]: string }
: {};
type Params = ExtractRouteParams<'/api/:version/user/:id'>;
// Params = { version: string; id: string }