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

如何在TypeScript中实现字符串类型的前缀部分匹配?

在TypeScript中实现路由权限的部分匹配类型

你可以通过TypeScript的模板字面量类型和条件类型实现这个需求,具体方案如下:

1. 原始路由权限类型

首先是你定义的RoutePermissions联合类型:

export type RoutePermissions =
  | 'page:mypage1/subroute1'
  | 'page:mypage1/subroute2'
  | 'page:mypage1/subroute3'
  | 'page:mypage2/subroute1'
  | 'page:mypage3/subroute1'

2. 实现PartialRouteMatchType

通过类型工具提取每个路由的前缀部分,并自动去重:

// 提取单个路由的前缀(到第一个/之前的部分)
type ExtractRoutePrefix<T extends string> = T extends `${infer Prefix}/${string}` ? Prefix : T;

// 生成允许的部分匹配前缀联合类型
type PartialRouteMatchType = ExtractRoutePrefix<RoutePermissions>;

3. 验证效果

定义函数并测试:

const partialRouteMatch = (partialRoute: PartialRouteMatchType) => {};

partialRouteMatch('page:mypage1'); // ✅ 合法
partialRouteMatch('page:mypage2'); // ✅ 合法
partialRouteMatch('page:mypage3'); // ✅ 合法
partialRouteMatch('page:mypage22'); // ❌ 类型报错,不存在该前缀

原理说明

  • ExtractRoutePrefix<T>利用模板字面量的模式匹配能力,通过infer关键字捕获每个路由字符串中第一个/之前的部分作为前缀;如果路由没有/(兼容场景),则直接返回原字符串。
  • 当将该类型工具应用到RoutePermissions联合类型时,TypeScript会自动遍历所有联合成员,提取对应的前缀并自动合并重复项,最终得到唯一的合法前缀联合类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:24