我正在将Flow用作JavaScript代码的静态类型检查器,并且出现以下错误:
Cannot call this.props.onChange because undefined [1] is not a function.
[1] 25│ onChange?: Time => any,
:
192│ if (isValid && this.props.onChange) {
193│ const match = this.matchValue(value);
194│ if (match) {
195│ this.props.onChange(this.parsedToTime(this.parseValue(match)));
196│ }
197│ }
198│ }
我对道具的定义如下(定义了更多的道具,并用...
标记):
type Props = {
...
onChange?: Time => any,
...
};
然后我将props用作我的React类定义中的类型参数:
export default class TimeInput extends React.Component<Props, State> {
...
// ...and in this class I have a method that calls onChange
// if onChange is not evaluated as false
handleChange = ({ target }: { target: { value: string } }) => {
const { value } = target;
const isValid = this.validateInput(value);
this.setState({
value,
isValid
});
if (isValid && this.props.onChange) {
const match = this.matchValue(value);
if (match) {
this.props.onChange(this.parsedToTime(this.parseValue(match)));
}
}
};
}
如果我正确理解了Flow Docs,那么if (this.props.onChange) {...}
测试应该足以让Flow理解,onChange
不能为undefined
,因此它必须是一个函数(如类型定义中所定义)。
我在这里做什么错了?