TypeScript实现Path类型约束:禁止特定特殊字符
解决方案
要实现仅允许字母/数字、严格符合指定格式的Path类型,我们可以通过自定义合法段类型替换原类型中的string,限制变量部分不能包含:和/,同时利用TypeScript模板字符串类型的严格匹配特性确保路径格式正确。
完整代码实现
// 定义仅允许字母/数字的路径段类型,禁止包含':'和'/' type ValidSegment = string extends `${infer Char}${infer Rest}` ? Char extends ':' | '/' ? never : Rest extends '' ? Char : `${Char}${ValidSegment}` : ''; // 严格匹配指定格式的Path类型 type Path = `\\path\\${ValidSegment}\\page\\random` | `\\path\\page\\${ValidSegment}`; // 合法路径(通过类型检查) const path1: Path = '\\path\\hello\\page\\random'; const path2: Path = '\\path\\page\\somethingelse'; // 非法路径(触发类型报错) const path3: Path = '\\path\\:id\\page\\random'; // 包含':'参数标识 const path4: Path = '\\path\\page\\:param'; // 包含':'参数标识 const path5: Path = '\\path\\page\\somethingelse\\and'; // 格式错误(多了额外路径段)
说明
ValidSegment类型:通过递归模板字符串推断,检查每个字符是否为:或/,如果是则返回never(不允许),否则继续验证剩余字符,最终只保留由字母/数字组成的字符串。Path类型:用ValidSegment替代原类型中的string,确保变量部分符合要求;同时模板字符串的固定结构会自动拦截格式错误的路径(比如多余的路径段)。
内容的提问来源于stack exchange,提问作者Ewan
相关产品推荐
相关产品推荐

