请考虑以下事项:
interface Man {
name: string
}
interface Dog {
breed: string
}
let manDog: Man | Dog;
是否可以创建类型为ManDog
的{{1}}类型,以便人们可以执行此操作:
Man | Dog
答案 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 {}
或者像这样的类型具有Man
或Dog
type ManDog = Man | Dog;