如何避免使用空数组进行Flow输入错误?

问题描述 投票:0回答:1

我遇到了我认为是假阴性的Flow错误。这是我的相关代码:

export type ValidationError = {
  name: string,
  id?: number,
  message: string
}

const determineErrorMessage = (name: string) => {
  if (!_.isEmpty(validationErrors)) {
    const error: ValidationError = validationErrors.find(error => error.name === name);

    if (error) {
      return (
        <Form.Label className={classes.errorMessage}>
          {error.message}
        </Form.Label>      
      );
    } else {
      return null;
    }
  } else {
    return null;
  }
}

错误与代码的这一部分有关:

validationErrors.find(error => error.name === name)

流程是这样说的:

Cannot assign `validationErrors.find(...)` to `error` because  undefined [1] is incompatible with  `ValidationError` 

我已经阅读了一些相关内容,甚至查阅了相关的Flow文档页面:https://flow.org/en/docs/types/arrays/大约在此页面的2/3下方,它说:“随着Flow变得更加智能,将来可能会解决此问题,但现在您应该意识到它。“

我是否应该接受我没有做错任何事情,并且Flow将来会得到改善?

reactjs flowtype
1个回答
0
投票

Flow在这里指出一个合法的错误。

const error: ValidationError = 

应该是

const error: ValidationError | void =

因为find如果找不到任何内容,将返回undefined

但是,假设validationErrors已声明为Array<ValidationError>,那么您不必首先包含: ValidationError,因为Flow知道给定的Array<T>,然后find返回T | void,从而允许你要做的

const error =
© www.soinside.com 2019 - 2024. All rights reserved.