【发布时间】:2021-12-09 10:42:42
【问题描述】:
我有一个 React 包装器组件,它根据“变体”道具呈现特定组件。有基本组件和其他两个扩展基本组件的道具。联合类型不起作用。这是包装器组件的代码:
type Props =
| ({ variant: "first" } & FirstComponentProps) }
| ({ variant: "second" } & SecondComponentProps)
| BaseComponentProps);
export default function WrapperComponent(props: Props) {
switch (props.variant) {
case "first":
return <FirstComponent {...props} />
case "second":
return <SecondComponent {...props} />
default:
return <BaseComponent {...props} />
}
}
这些组件的类型:
type BaseComponentProps = { propA: string; }
type FirstComponentProps = { propB: string } & BaseComponentProps
type SecondComponentProps = { propC: string } & BaseComponentProps
以及如何使用这个包装组件:
<WrapperComponent variant="first" propA="value" propB="value" />
<WrapperComponent variant="second" propA="value" propC="value" />
<WrapperComponent propA="value" />
这应该会触发打字稿警告:
<WrapperComponent propA="value" propB="value" />
如何正确键入包装器组件的 props 以便它只允许正确的 props 组合?
谢谢!
【问题讨论】:
-
改用接口
标签: javascript reactjs typescript