我遇到了我认为是假阴性的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将来会得到改善?
Flow在这里指出一个合法的错误。
const error: ValidationError =
应该是
const error: ValidationError | void =
因为find
如果找不到任何内容,将返回undefined
。
但是,假设validationErrors
已声明为Array<ValidationError>
,那么您不必首先包含: ValidationError
,因为Flow知道给定的Array<T>
,然后find
返回T | void
,从而允许你要做的
const error =