flowtype 如何用可选字段注释联合

flowtype how to annotate union with optional fields

flow中如何实现如下

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

我想表达一种类型,其中 returns 一个错误和可选数据或没有错误字段,以防出现 none。但是,我将其用作

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

看起来,我的可选字段语法错误

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

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

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

  1. {key: ?valueType}表示对象必须包含key,其值必须是null[=33] =] 或 类型 valueType.

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

  3. {key?: ?valueType}表示对象可能包含key,如果key存在,它的值必须是null 类型 valueType.

您的用例需要#2 或#3。就我个人而言,我建议不要使用#3——我发现该模式比它需要的更灵活。