flowtype如何使用可选字段注释union

时间:2016-05-11 14:25:12

标签: flowtype

如何在流程中实现以下功能

export type Response = {
  err: string,
  data: ?Array<Object>,
} | {
  data: Array<Object>,
};

我想表达一个类型,它返回错误和可选数据,或者没有错误字段,如果没有。但是,我用它作为

return { err: 'todo' };
                ^^^^^^^^^^^^^^^ object literal. This type is incompatible with
.... Response
union: object type(s)

2 个答案:

答案 0 :(得分:24)

在Flow中,可选字段和可空值之间存在差异。

  1. {key: ?valueType}表示对象必须包含key,其值必须为null 类型valueType

  2. {key?: valueType}表示对象可能包含key,如果存在key,则其值必须为valueType类型

  3. {key?: ?valueType}表示对象可能包含key,如果存在key,则其值必须为null <类型valueType的强>或。

  4. 您的用例需要#2或#3。我个人建议不要使用#3 - 我发现这种模式比它需要的更灵活。

答案 1 :(得分:0)

看起来,我的语法对于可选字段

是错误的
export type Response = {
  err: string,
  data?: Array<Object>,
} | {
  data: Array<Object>,
};

这不会给出任何错误。我不知道为什么没有报告任何语法错误。