我有各种React组件,当传入不同的道具时可以有不同的功能。通常我遇到一些分支逻辑,如果prop1
存在,做一件事,但如果prop2
存在做点什么。
一个例子可能是一个元素的两个更改处理程序,其输入带有不同的参数。
有没有办法在Flowjs中指定需要两个处理程序之一?
答案 0 :(得分:6)
幸运的是,您想要的Flow类型注释可以应用于React之外的上下文中。通常,如果您想要独占或类型检查,您可以这样做:
type Something = {
prop1: number,
prop2?: null
}
type Another = {
prop1?: null,
prop2: number
}
function foo(parameter: Something | Another) {
}
foo({ prop1: 10 }); // Good
foo({ prop2: 10 }); // Good
foo({ prop1: 10, prop2: 10 }); // Bad
如果您想进行包容性或类型检查,可以执行以下操作:
type Something = {
prop1: number,
prop2?: null
}
type Another = {
prop1?: null,
prop2: number
}
type SomethingAndAnother = {
prop1: number,
prop2: number
}
function foo(parameter: Something | Another | SomethingAndAnother) {
}
foo({ something: 10, prop1: 10 }); // Good
foo({ something: 10 }); // Bad
foo({ prop1: 10 }); // Good
foo({ prop2: 10 }); // Good
foo({ prop1: 10, prop2: 10 }); // Good
在React中,您可以在props
属性上定义类型,如下所示:
class TodoList extends React.Component {
props: Something | Another;
render(): React.Element {
return (
// ....
)
}
}
答案 1 :(得分:0)
枚举如何:
type Props = {
['prop1' | 'prop2']: string,
}