问题发现
我们需求的实现中,某个对象的部分属性key需要是特定字符开头的,不同于已知key可以在接口直接声明,我们需要在interface中定义某些key是以特定字符开头的字面量类型
问题解决
- typescript 4.1版本中提出了模板字面量的概念,借鉴了ES6模板字符串的概念,我们可以先声明字面量类型的公共部分,并使用模板字面量衔接。直接看例子。
type Common = 'subject'
type M = `math_${Common}`
type E = `english_${Common}`
这里的类型M和E就复用了Common,分别表示'math_subject' 和 'english_subject'的字面量类型。
- 有上述做铺垫,如果我们要表示一个以field开头的任意字面量类型该怎么做呢,我们只需把填充变量类型定义为string即可。
type Field = `field${string}`
- 那表示key是以特定字符串开头(假设以field开头)的对象,就可以这么办了
interface Field {
[key: `field${string}`]: string
}