【发布时间】:2020-06-09 09:51:32
【问题描述】:
在我的项目中,我有一个包含两个道具的组件:
collapsible,
onToggle
我很难在 TypeScript 中为这些道具创建一个类型。问题是,当可折叠为 true 时,我希望 onToggle 函数为 (): void,但如果可折叠为 false,我希望 onToggle 未定义。
我尝试过这样的事情:
type Props = {
collapsible: boolean;
onToggle: collapsible ? () => void : undefined;
}
但显然它不起作用,因为在定义 onToggle 类型时可折叠是未定义的。如何处理?这甚至可能让类型依赖于值吗?
【问题讨论】:
-
你真的需要
collapsible吗?你不能让onToggle可选,并检查onToggle === undefined是否? -
虽然这在布尔属性上使用有区别的联合是可行的,如下面的答案所示,你实际上对类型系统提出了太多要求。想象一下拥有
collapsible: Math.random() > .5 -
这是一个更普遍的问题,如果这样的事情是可能的。我知道在这种情况下很容易在组件内部检查它:)
标签: reactjs typescript toggle react-props react-typescript