TypeScript 4.7如何定义符合特定命名规则的字符串类型?
在TypeScript 4.7中定义匹配特定格式文件名的字符串类型
可以通过递归模板字符串类型实现这个需求,精准约束文件名格式(全大写字母、下划线分隔、.pdf后缀),并应用到接口的键上。
步骤1:定义基础类型
先定义单个大写字母的联合类型,作为构建文件名段的基础:
type UppercaseLetter = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z';
步骤2:构建文件名的前缀部分
递归定义由大写字母组成的独立段,以及以上划线分隔的多段结构:
// 一个或多个大写字母组成的独立段 type UppercaseSegment = UppercaseLetter | `${UppercaseLetter}${UppercaseSegment}`; // 以上划线分隔的一个或多个大写字母段(对应文件名的前缀部分) type FileNamePrefix = UppercaseSegment | `${UppercaseSegment}_${FileNamePrefix}`;
步骤3:定义完整的合法文件名类型
拼接前缀和.pdf后缀,得到最终的合法文件名类型:
type ValidFileName = `${FileNamePrefix}.pdf`;
步骤4:应用到接口的键约束
将ValidFileName作为接口的索引签名类型,确保接口的键严格符合指定格式:
export interface FileChecks { [key: ValidFileName]: (string | RegExp)[]; }
验证效果
使用时,不符合格式的键会直接触发TypeScript类型错误:
const validChecks: FileChecks = { 'ABCD.pdf': [], // ✅ 合法 'VV_XX.pdf': [], // ✅ 合法 'XXX_YY_ZZZ.pdf': [], // ✅ 合法 'ABCD_GG_JJ_PPPP.pdf': [], // ✅ 合法 }; const invalidChecks: FileChecks = { 'abcd.pdf': [], // ❌ 错误:小写字母不符合要求 'XXX-YY.pdf': [], // ❌ 错误:使用横杠而非下划线 'XXX.pdf.txt': [], // ❌ 错误:后缀不是.pdf '': [], // ❌ 错误:空字符串不符合格式 };
内容的提问来源于stack exchange,提问作者chrismead
相关产品推荐
相关产品推荐

