You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:45:29