【发布时间】:2020-01-10 02:01:19
【问题描述】:
我正在尝试根据另一个值计算值的类型。如果 prop1 的类型是 x,那么 prop2 的类型应该是 y。
例如,在输入字段的情况下,
<Input
type="number"
onChange={(value: number | string) => {}}
/>
如果 prop type="number" 那么来自 onChange 的 typeof 值应该是 number 和 string 否则。我基本上是想在这里删除| 条件。
当我尝试这样调用输入时:
<Input
type="number"
onChange={(value: number) => {}}
/>
Flow 抛出错误,因为如果使用 |,该值可以是数字或字符串。由于类型为"number",因此该值显然会编号。有没有办法让流程理解在这种情况下这将是数字?
Input 组件如下所示:
type CommonProps = {
disabled?: boolean,
autoFocus?: boolean,
placeholder: string
};
type PropsNumber = {
type: 'number',
onChange: (number) => void,
};
type PropsString = {
type: 'string' | 'email',
onChange: (string) => void,
};
type Props = CommonProps & (PropsNumber | PropsString);
class Input extends React.Component<Props, {}> {
render(){
return (
<input
onChange={this.props.onChange}
type={this.props.type}
disabled={this.props.disabled}
autoFocus={this.props.autoFocus}
/>
);
}
}
在调用此组件的任何位置都会收到错误 Could not decide which case to select, since case 1 [1] may work but if it doesn't case 2 [2] looks promising too.。
为场景添加playground。
【问题讨论】:
-
虽然可能感觉不舒服,但我认为您所拥有的一切都很好,根据我的经验,通常是 Flow 中的“完成的事情”。