如何将联合类型用作接口/类型的属性名称

时间:2019-07-17 21:10:06

标签: typescript types interface

我有一个联合体类型:

type Browser = 'chrome' | 'firefox'

,我想创建一个接口/类型,其中有效属性只能是chrome和firefox。我想到了这个:

type IM {
  [key in Browser]: {
    string: boolean
  }
}

问题是我想允许chromefirefox属性中的任何属性。可能吗?我正在尝试使用括号概念:

[string]: boolean

但毫不奇怪,它不起作用。

1 个答案:

答案 0 :(得分:1)

如果要允许任何boolean属性,可以使用索引签名:

type Browser = 'chrome' | 'firefox'

type IM = {
  [key in Browser]: {
    [name: string]: boolean
  }
}

自定义映射类型并不是必需的,您可以改为使用Record

type IM = Record<Browser, {
    [name: string]: boolean
}>