Flowtype:如果类型没有匹配的字段,则不相交联合区分不起作用

时间:2019-07-15 19:04:38

标签: javascript types flowtype

我有一个函数,该函数应根据此参数上是否存在字段来不同地处理作为参数接收的对象。

我创建了以下示例(try it yourself)-它是the flow type docs about disjount union types中示例的改编:

// @flow

type Success = { value: boolean };
type Failed  = { error: string };

type Response = Success | Failed;

function handleResponse(response: Response) {
  if (response.value) {
    var value = response.value;
  } else {
    var error = response.error; // Error!
  }
}

我在指定行中得到的错误是:

Cannot get `response.error` because property `error` is missing in `Success` [1]. 

很不幸,我没有一个具有不同值的共享密钥,这将有助于我区分SuccessFailed对象。

还是有其他方法可以使其正常工作?

1 个答案:

答案 0 :(得分:0)

您必须使用确切类型。在下面有关disjoint unions with exact type的部分中有进一步说明。

必须添加带有|的精确类型,并且if / else必须变成if / else if。这段代码现在不再抛出任何错误(try the new code):

// @flow

type Success = {| value: boolean |};
type Failed  = {| error: string |};

type Response = Success | Failed;

function handleResponse(response: Response) {
  if (response.value) {
    var value: boolean = response.value;
  } else if (response.error) {
    var error: string = response.error; // Error!
  }
}

感谢@ user11307804向我指出此答案!