如何用TypeScript定义符合T恤尺码规范的字符串字面量类型?
实现TypeScript T恤尺码类型约束
要实现支持无穷多种合法格式的TShirt类型,可以利用TypeScript的递归模板字符串类型来定义规则,具体实现如下:
// 基础单字母尺码:s、m、l type SingleSize = 's' | 'm' | 'l'; // 递归定义加小码:xs、xxs、xxxs...(任意数量x前缀+s) type ExtraSmall = `x${ExtraSmall | 's'}`; // 递归定义加大码:xl、xxl、xxxl...(任意数量x前缀+l) type ExtraLarge = `x${ExtraLarge | 'l'}`; // 合并所有合法尺码类型 type TShirt = SingleSize | ExtraSmall | ExtraLarge;
验证效果
按照示例测试:
const validXS: TShirt = 'xs'; // ✅ 合法 const validXXXXXS: TShirt = 'xxxxxxxxxxs'; // ✅ 合法(10个x+s) const validXXXXL: TShirt = 'xxxxxxxxxxxxl'; // ✅ 合法(12个x+l) const invalid: TShirt = 'xsz'; // ❌ 类型错误(后缀不是s/l)
原理说明
SingleSize直接覆盖单个字母的基础尺码;ExtraSmall通过递归模板字符串,允许在s前添加任意数量的x,生成从xs开始的所有加小码;ExtraLarge同理,允许在l前添加任意数量的x,生成从xl开始的所有加大码;- 三者合并后,
TShirt类型会自动校验字符串是否符合[x*]s、m、[x*]l的格式,且支持无穷多的x前缀。
内容的提问来源于stack exchange,提问作者johann1301s
相关产品推荐
相关产品推荐

