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

stinaq

我有一个Entity由两个不同类型组成的Door并集类型,Handle属性旋转存在于一种子类型中,但另一种不存在。这似乎意味着我无法在该属性上进行优化,但会得到错误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由于1中rotation缺少属性,因此无法获取Handle

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

在流程编辑器中运行示例

桑欣

通过不将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;
  }
}

流程编辑器

流文档链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

流:没有参数的对象类型不能分配给带有可选参数的对象类型

Typescript:如何从联合类型中排除仅具有可选属性的接口

优化标记的联合的类型

如何在流中定义具有指定类型的所有字段可选的泛型类型

F# 带有可选递归组件的判别联合

对象中可选字段的流类型

火花流中的两种类型的联合之间有什么区别

在Flow中,为什么带有定义的prop的对象类型不是带有可选的prop的对象类型的子类型?

在Typescript Reac + Redux中具有联合类型的类型错误时属性不存在

带有TypeScript的可选通用类型

带有可选返回类型的JavaBean自省

带有可选属性的 UIView 扩展

给定类型,定义带有参数类型键的函数联合

带有混合类型的 Swift 字典(可选和非可选)

带有可选字段的 INNER JOIN 优化

如何编写(可选子句中的联合)或(带有union子句的可选)?

流联合类型在递归调用中不起作用

具有联合类型的类型上不存在属性

流类型:优化数组

类型联合被简化为“从不”打断打字:类型被简化为“从不”,因为属性在某些成分中具有冲突类型

带有承诺的流类型(获取)

带有可选包装类型的打字稿类型保护

带有联合返回类型的 Angular/Typescript @Output

带有区分联合的打字稿条件类型

带有字符串类型的 C++ 联合

从Go中的可变参数创建带有可选字段的类型

Java NULL检查带有可选属性的多个属性

带有Swift规则的Core Data可选属性和属性

区分联合类型的类型属性