注释可以返回两种不同类型对象的函数的正确方法是什么?

时间:2018-03-27 08:01:24

标签: javascript flowtype

我想知道如何注释一个可以返回两个不同对象的函数。例如,许多库将使用与此类似的模式:

// @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]

注释这个的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

使用|是创建a Union的正确方法,即表示可能返回不同类型集的值的方法。

报告错误流是因为favoriteFruit已使用voidundefined)注释,但您从函数返回类型为string的属性的值。

也许应该是Maybe类型?可能是吧。正确地将其更改为?string typechecks