如何编写TypeScript泛型BeforeSign以匹配指定路由格式?
实现BeforeSign泛型类型,满足路由校验需求
以下是符合需求的BeforeSign泛型实现及完整验证代码:
type Routes = 'first' | 'second'; type BeforeSign<T extends string, S extends string> = T | `${T}${S}${string}`; const handleRoute = (route: BeforeSign<Routes, '#'>) => route; // 合法调用,无类型错误 handleRoute('first'); handleRoute('first#additional'); handleRoute('first#random'); handleRoute('second#example'); // @ts-expect-error 非法路由前缀,触发类型错误 handleRoute('third'); // @ts-expect-error 非法路由前缀,触发类型错误 handleRoute('third#nope');
实现说明
BeforeSign泛型接收两个字符串类型参数:T:基础路由的联合类型(如示例中的'first' | 'second'),限定为字符串类型S:分隔符(如示例中的'#'),同样限定为字符串类型
- 生成的类型是两种合法场景的联合:
- 直接使用
T中的任意基础路由值(如'first'、'second') - 以
T中路由值开头,后跟分隔符S,再拼接任意字符串的模板字符串(如'first#xxx'、'second#yyy')
- 直接使用
- 该实现会自动拦截非法路由输入:无论是完全不存在的路由前缀(如
'third'),还是非法前缀加分隔符的形式(如'third#nope'),都会触发TypeScript类型错误。
内容的提问来源于stack exchange,提问作者Everettss
相关产品推荐
相关产品推荐

