javascript - 使用流优化联合类型中的可选属性

标签 javascript flowtype

我有一个联合类型 Entity,它由两种不同的类型组成,DoorHandle。属性旋转存在于其中一种子类型中,但不存在于另一种子类型中。这似乎意味着我无法优化该属性,但出现错误 Cannot get entity.rotation because property rotation is missing inHandle[1].

我知道它不见了,这就是我尝试检查它是否存在的原因。

type Door = {
  id: number,
  rotation: number
}

type Handle = {
  id: number
}

type Entity = Handle | Door;

const foo = (entity: Entity): number => {
  if (entity.rotation) {
    return entity.rotation;
  } else {
   return 2;
  }
}

无法获取 entity.rotation,因为 Handle 中缺少属性 rotation 1 .

有没有办法改进类型中某个属性存在或不存在的位置?

Running example in the flow editor

最佳答案

通过不将 Handle 声明为严格类型,您是在告诉 Flow 它可能包含旋转属性。

type Door = {
  id: number,
  rotation: number
}

type Handle = {|
  id: number
|}

type Entity = Handle | Door;

const foo = (entity: Entity): number => {
  if (entity.rotation) {
    return entity.rotation;
  } else {
   return 2;
  }
}

Flow editor

Flow documentation link

关于javascript - 使用流优化联合类型中的可选属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51242264/

相关文章:

javascript - FlowType - 复杂对象的重复声明

javascript - "JQuery Interface file"for Flow(来自 Facebook 的 JavaScript 静态类型检查器)?

javascript - AngularJS 在扩展页面中将 URL 更改为 "unsafe:"

javascript - 如何开发Chrome扩展来定期检查网站?

javascript - 在使用 Flow 时,如何将 props 传播到使用精确 props 的 React 组件?

npm - 如何通过 Babel/Webpack 保持 Flow 注释完整?

javascript - 当我监听 XHR 错误时,为什么 Flow 会提示?

javascript - 计算表行并填充总计字段

javascript - Handlebars 数组元素在此

javascript - 对象不支持 jquery 中的 addEventListener IE8