typescript - 联合类型 - 允许不同的子类型 |

标签 typescript

我输入了名为Entry的内容,即:

export type Entry = {
  number: number
  position: number
  entryItem: Banana | Orange
}

然后我将 EntryItem 类型定义为:

香蕉型

export type Banana = {
  number: number
  bananaTitle: string
}

苹果型

export type Apple = {
  number: number
  appleTitle: string
}

现在,如果我做类似的事情:

entry.entryItem.bananaTitle

我收到错误:“‘Banana | Apple’类型上不存在属性‘bananaTitle’”

同样,如果我这样做:

entry.entryItem.appleTitle

我收到错误:“属性‘appleTitle’在类型‘Banana | Apple’上不存在”

据我所知,运算符|将允许我创建一个可以“智能”理解我指的是Banana还是Apple的类型 当我做类似 entry.entryItem.UNIQUE_PROPERTY_OF_BANANA_OR_APPLE

的事情时

我错过了什么?

最佳答案

编译器不是魔术师。属性 entryItem 可能是 BananaApple。由于我们处于编译级别,因此您必须告诉编译器当前对象是什么。有不同的方法。其中之一是使用 in 运算符,例如

function test(entry: Entry) {
  if ("appleTitle" in entry.entryItem) {
     entry.entryItem.appleTitle; // it's an apple
  } else {
    entry.entryItem.bananaTitle; // it's a banana
  }
}

关于typescript - 联合类型 - 允许不同的子类型 |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875894/

相关文章:

typescript - 如何在 Ember.js 中使用 TypeScript

javascript - Redux-saga如何向saga内部请求传递参数

javascript - TypeScript 字符串文字类型的 TSDocs

typescript - AbortController 的 Typescript 类型是什么?

javascript - 带有调用签名实例化的 typescript 类型

javascript - 在 for 循环内循环 - 嵌套数组

reactjs - Storybook:从 typescript 自动生成文档

Angular 2点击在ngFor内多次触发

typescript - 如何使用编译器 API 将 Typescript 转换为 Typescript?

javascript - 为什么 Typescript 不要求我的函数返回某种类型?