如何用正则表达式定义更通用的TypeScript本地化名称接口类型?
用TypeScript模板字符串类型实现通用OsmNames类型
当然可以,不需要正则表达式,TypeScript 4.1+ 支持的模板字符串类型就能完美解决这个问题,直接定义出符合name和name:xx格式的通用类型:
方案1:限制允许的语言代码
如果需要明确限定支持的语言(比如只允许de、pl、en这些),可以先定义语言代码集合,再生成对应字段:
// 定义允许的语言代码,按需扩展 type LanguageCode = 'de' | 'pl' | 'en' | 'fr'; export type OsmNames = { // 基础名称字段 name: string; } & { // 动态生成所有name:xx格式的本地化字段 [K in `name:${LanguageCode}`]: string; };
方案2:允许任意语言代码
如果不需要限制语言,支持任意name:xx格式的字段,直接用string匹配后缀即可:
export type OsmNames = { name: string; } & { [K in `name:${string}`]: string; };
说明
- 模板字符串类型
name:${...}会自动匹配所有符合该格式的键,TypeScript会在类型检查时识别这些字段。 - 交叉类型
&用来把基础的name字段和动态生成的本地化字段合并,完全替代原来手动写大量重复字段的接口。
内容的提问来源于stack exchange,提问作者BuZZ-dEE
相关产品推荐
相关产品推荐

