【发布时间】:2020-08-02 01:21:29
【问题描述】:
我正在尝试使用两个接口之间的管道类型创建一个带有条件道具的 React 组件。我是这样设置的:
interface BaseProps {
"aria-label"?: string;
className?: string;
onClick?: () => void;
}
interface IconProps extends BaseProps {
"aria-label": string;
children: never;
icon: React.ReactElement;
}
interface ButtonProps extends BaseProps {
children: React.ReactElement;
}
type Props = ButtonProps | IconProps;
class Button extends React.Component<Props> {
render(): React.ReactElement {
const { children, icon, ...rest } = this.props;
// ERROR: "Property 'icon' does not exist on type '(Readonly<ButtonProps> & Readonly<{ children?: ReactNode; }>) | (Readonly<IconProps> & Readonly<{ children?: ReactNode; }>)'."
}
}
我似乎无法弄清楚如何实现以下目标:
- 当有“icon”道具时,强制使用“aria-label”并禁止子元素
- 当没有“icon”道具时,强制孩子并允许可选的“aria-label”
【问题讨论】:
标签: reactjs typescript