You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typescript如何从路径字符串中提取所有:前缀路由参数的联合类型

实现方案

你可以通过递归模板字面量类型逐段拆分路径,提取所有符合规则的参数名:

type PathParam<T extends string> =
  // 匹配到【冒号+参数名+斜杠+剩余路径】的场景
  T extends `${string}:${infer Param}/${infer Rest}`
    // 提取当前参数 + 递归提取剩余路径的参数,合并为联合类型
    ? Param | PathParam<Rest>
    // 匹配路径末尾最后一个参数的场景(后面没有斜杠)
    : T extends `${string}:${infer LastParam}`
      ? LastParam
      // 无匹配参数时返回空联合
      : never

效果验证

// 单参数场景
type ParamSingle = PathParam<"/post/:post_id">;
// 类型等价于:"post_id"

// 多参数场景
type ParamMultiple = PathParam<"/post/:post_id/likes/:like_id">;
// 类型等价于:"post_id" | "like_id"

逻辑说明

每次匹配到路径中的:后,先截取到下一个/之前的内容作为当前参数,再把剩余的路径片段传入类型递归处理,所有提取到的参数会自动合并为联合类型,完全等效于正则全局匹配的效果。
如果需要进一步限制参数名只能由小写字母和下划线组成,给Param增加额外的模式匹配判断即可。

内容的提问来源于stack exchange,提问作者Eliya Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:07