在带有流的联合类型中优化可选属性

时间:2018-07-09 09:30:20

标签: javascript flowtype

我有一个联合类型Entity,它由两种不同的类型DoorHandle组成。属性旋转存在于一种子类型中,但不存在于另一种子类型中。这似乎意味着我无法对该属性进行优化,但是会收到错误Cannot get entity.rotation because property rotation is missing in句柄[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 1中缺少属性rotation,因此无法获得Handle

有没有一种方法可以改善类型中存在或不存在属性的位置?

Running example in the flow editor

1 个答案:

答案 0 :(得分:3)

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

npm i webpack webpack-cli -g --save-dev

Flow editor

Flow documentation link