typescript - 如何从两个接口(interface)的联合创建一个类型?

标签 typescript

考虑以下几点:

interface Man {
  name: string
}

interface Dog {
  breed: string
}

let manDog: Man | Dog;

是否有可能创建一个类型 ManDog 等同于 Man | Dog 这样就可以做到这一点:

let manDog: ManDog;

最佳答案

您可以使用type 关键字(不是let)来创建一个新类型 一个联合类型的别名。

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

interface Man {
  name: string
}

interface Dog {
  breed: string
}

type ManOrDog = Man | Dog;

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


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

新类型将是另一种 Interface,您可以对其进行扩展等等。

您不能创建扩展由 type 创建的别名的 Interface

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

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

然而,对于交叉路口类型,您可以在新类型

之间进行选择
interface ManAndDog extends Man, Dog { }

和一个别名

type ManAndDog = Man & Dog;

关于typescript - 如何从两个接口(interface)的联合创建一个类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882213/

相关文章:

reactjs - 用空数组初始化的钩子(Hook)?

javascript - Angular - 模型更改后 Electron View 不会更新

node.js - 如何将 ts-topojson 包含到 Angular2 应用程序中?

typescript - tsconfig 和环境声明中的项目引用

javascript - 使用可选的链接运算符进行对象属性访问

angular - 如何在 angular-cli 1.0.1 应用程序中使用 chrome-app.d.ts 类型?

javascript - Promise 返回一个函数而不是一个对象

typescript - ts-node-dev 不应用自动重新加载的更改

javascript - 为什么 Typescript 在转译代码中将 .default() 添加到类构造函数中?

TypeScript:导入的模块类不可见