流类型检查:即使有条件,undefined也不是函数

时间:2018-09-14 08:35:03

标签: javascript reactjs flowtype

我正在将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,因此它必须是一个函数(如类型定义中所定义)。

我在这里做什么错了?

0 个答案:

没有答案