TypeScript:如何声明禁止空格的模板字面量类型?
解决TypeScript模板字面量类型禁止空格的问题
你当前的Duration类型允许数字和单位间存在空格,是因为TypeScript中${number}在模板字面量里的匹配逻辑比较宽松——它会接受任何能被解析为数字的字符串片段,包括带有空格的部分。要实现严格禁止中间空格的需求,需要定义纯数字字符串类型来替代直接使用number。
解决方案代码
// 定义单个数字字符类型 type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; // 递归定义任意长度的纯数字字符串(至少1位数字) type NumberString = Digit | `${Digit}${NumberString}`; // 用纯数字字符串拼接单位,确保无空格 type Duration = `${NumberString}${'ms' | 's'}`; let a: Duration = "2000 ms"; // 编译错误,符合预期 let b: Duration = "2s"; // 合法 let c: Duration = "2000ms"; // 合法
原理说明
Digit限定了单个字符必须是0-9的数字;NumberString通过递归组合,确保整个字符串部分是纯数字(无空格、字母等其他字符);- 最终的
Duration类型要求数字部分和单位部分直接拼接,中间不能插入任何空格或其他字符。
内容的提问来源于stack exchange,提问作者Chriss
相关产品推荐
相关产品推荐

