如何从两个接口的并集创建一个类型?

时间:2017-08-25 13:09:32

标签: typescript

请考虑以下事项:

interface Man {
  name: string
}

interface Dog {
  breed: string
}

let manDog: Man | Dog;

是否可以创建类型为ManDog的{​​{1}}类型,以便人们可以执行此操作:

Man | Dog

2 个答案:

答案 0 :(得分:3)

您可以使用type关键字(而非let)为联合类型创建新类型别名。

https://www.typescriptlang.org/docs/handbook/advanced-types.html

interface Man {
  name: string
}

interface Dog {
  breed: string
}

type ManOrDog = Man | Dog;

要有效地使用这些联合类型,请不要忘记查看类型保护,在同一文档链接中进行了解释。

编辑:为什么我用别名替换新类型

新类型将是另一个Interface,您可以扩展等等。

您无法创建扩展Interface创建的别名的type

此外,错误消息不会显示ManOrDog

在这种情况下,对于联合类型,别名是唯一的方法。

对于交叉类型,您可以选择新类型

interface ManAndDog extends Man, Dog { }

别名

type ManAndDog = Man & Dog;

答案 1 :(得分:1)

您可以使用继承来实现它

 interface ManDog extends Man, Dog {}

或者像这样的类型具有ManDog

中的任何一个
type ManDog = Man | Dog;