我正在创建一个动态小部件,可以为空或已填充。默认情况下应为空。当
为此,我尝试使用辨别联合类型 (
如何解决 TypeScript 错误?
populated={true}
时,我希望 totalGross
和 totalNet
值是必需的。否则,这两个属性不应被允许。为此,我尝试使用辨别联合类型 (
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>
);
};
如何解决 TypeScript 错误?
totalNet
和totalGross
分配默认值应该可以解决即时错误(即totalNet ='',totalGross =''
)。然而,我认为WidgetBodyProps
的方式有点笨拙,特别是never
的用法。我猜后者是因为你想避免使用类型保护? - miqh