gpt4 book ai didi

reactjs - 如何使 TypeScript 界面 Prop 依赖于同一界面中的另一个 Prop ?

转载 作者:行者123 更新时间:2023-12-05 03:53:15 25 4
gpt4 key购买 nike

type ButtonVariant = 'action' | 'hero';

type Size = 'small' | 'medium' | 'large';

export interface ButtonProps {
variant: ButtonVariant;
size?: Size;
}

export default function Button(props: ButtonProps): ReactElement {
const { variant } = props;

if (variant === 'hero')) {
return <HeroButton {...props} />;
}

if (variant === 'pill') {
return <PillButton {...props} />;
}
}

在上面的代码中,我有 React 按钮的两个变体:HeroButtonPillButton

两个按钮都期望“ButtonProps”作为它们的 Prop 类型。但是,我想让 HeroButton 期望大小为“中”或“大”。 PillButton 应该接受“小”、“中”或“大”作为其尺寸属性。

问题:如何编写 ButtonProps 接口(interface),使 Button 组件允许(并在 VS Code 中建议)'小'​​ | '中号' | 'large' 当 variant prop 为“pill”时作为 size prop,但只允许 'medium' | 'large' 当 variant prop 是“hero”时?

注意:我研究了 TypeScript Discriminated Unions 来解决这个问题,但还没有成功。

最佳答案

试试这个:

export interface HeroButtonProps {
variant: 'hero';
size?: 'medium' | 'large';
}

export interface PillButtonProps {
variant: 'pill';
size?: 'small' | 'medium' | 'large';
}

export type ButtonProps = HeroButtonProps | PillButtonProps;

然后将 HeroButton 更改为仅接受 HeroButtonProps 并且同样适用于 PillButton

关于reactjs - 如何使 TypeScript 界面 Prop 依赖于同一界面中的另一个 Prop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61783252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com