【发布时间】:2021-04-20 01:02:49
【问题描述】:
我正在创建一个动态小部件,它可以是空的,也可以是填充的。默认情况下它应该是空的。当populated={true} 时,我希望需要totalGross 和totalNet 值。否则,这 2 个道具不应该被允许。
为此,我尝试使用区分类型 (WidgetBodyProps)。但是,TypeScript 会抱怨,因为 totalNet 和 totalGross 是 <WidgetBodyPopulated /> 中必需的道具
type WidgetBodyProps =
| { isEmpty?: false; totalNet: string; totalGross: string }
| { isEmpty: true; totalNet?: never; totalGross?: never };
type WidgetProps = WidgetHeaderProps & WidgetBodyProps;
const Widget = (props: WidgetProps) => {
const { title = "", isEmpty = true, totalNet, totalGross } = props;
return (
<Card>
<Box>
<WidgetHeader title={title} />
<Divider my="4" />
{isEmpty ? (
<WidgetBodyEmpty flex="1" />
) : (
<WidgetBodyPopulated totalNet={totalNet} totalGross={totalGross} />
)}
</Box>
</Card>
);
};
【问题讨论】:
-
为
totalNet和totalGross分配默认值应该可以修复直接错误(即totalNet = '', totalGross = '')。但是,我认为WidgetBodyProps的方式似乎有点笨拙,尤其是never的用法。我猜后者是因为你想使用类型保护来躲避?
标签: javascript reactjs typescript typeerror