TS - 模板字面量类型 ( 如何定义一个特定字符开头的字面量类型)

1,248 阅读1分钟

问题发现

我们需求的实现中,某个对象的部分属性key需要是特定字符开头的,不同于已知key可以在接口直接声明,我们需要在interface中定义某些key是以特定字符开头的字面量类型

问题解决

  1. typescript 4.1版本中提出了模板字面量的概念,借鉴了ES6模板字符串的概念,我们可以先声明字面量类型的公共部分,并使用模板字面量衔接。直接看例子。
  type Common = 'subject'
  type M = `math_${Common}`
  type E = `english_${Common}`

这里的类型M和E就复用了Common,分别表示'math_subject' 和 'english_subject'的字面量类型。

  1. 有上述做铺垫,如果我们要表示一个以field开头的任意字面量类型该怎么做呢,我们只需把填充变量类型定义为string即可。
  type Field = `field${string}`
 
  1. 那表示key是以特定字符串开头(假设以field开头)的对象,就可以这么办了
interface Field {
    [key: `field${string}`]: string
  }