如何将嵌套类型与另一个类型的定义相交

时间:2018-11-28 21:04:42

标签: typescript inheritance

我有两种类型,

type Foo = {
  [key: string]: {
    a: number
  }
}

type Bar = {
  b: number
}

,我想创建第三个类似的类型:

type FooBar = {
  [key: string]: {
    a: number,
    b: number
  }
}

如何使用继承定义FooBar(以确保FooFooBar始终具有相同的索引签名/密钥)?

我已经知道我可以做到

type FooBar = {
  [key: string]: Foo[string] & bar
}

但是,这需要我分别为keyFoo定义FooBar

1 个答案:

答案 0 :(得分:1)

对于仅带有字符串签名的简单示例,我不会再使事情复杂化。如果Foo具有离散键,并且您想向每个成员添加Bar,则可以使用映射类型:

type Foo = {
  [key: string]: {
    a: number
  }
}

type Bar = {
  b: number
}

type FooBar = {
  [P in keyof Foo]: Foo[P] & Bar
}