我想知道如何注释一个可以返回两个不同对象的函数。例如,许多库将使用与此类似的模式:
// @flow
type MaybeResult = {| err: string |} | {| favoriteFruit: void |};
const getFavoriteFruitObj = (name): MaybeResult =>
name === 'john' ? ({ favoriteFruit: 'apple' }) : ({ err: 'I only know peter\'s favorite fruit!' });
但是,这会从流程中返回以下错误:
5: name === 'john' ? ({ favoriteFruit: 'apple' }) : ({ err: 'I only know peter\'s favorite fruit!' });
^ Cannot return `name === 'john' ? {...} : {...}` because string [1] is incompatible with undefined [2] in property `favoriteFruit`.
References:
5: name === 'john' ? ({ favoriteFruit: 'apple' }) : ({ err: 'I only know peter\'s favorite fruit!' });
^ [1]
2: type MaybeResult = {| err: string |} | {| favoriteFruit: void |};
^ [2]
注释这个的正确方法是什么?
答案 0 :(得分:1)
使用|
是创建a Union的正确方法,即表示可能返回不同类型集的值的方法。
报告错误流是因为favoriteFruit
已使用void
(undefined
)注释,但您从函数返回类型为string
的属性的值。
也许应该是Maybe
类型?可能是吧。正确地将其更改为?string
typechecks。