【问题标题】:Infer type of react prop by sibling prop value通过兄弟道具值推断反应道具的类型
【发布时间】:2021-01-12 02:39:48
【问题描述】:

我定义了两种不同的Shop 类型:

interface BasicShop {
  address: string;
  distance?: number | null;
  name: string;
  thumbnail?: string;
}
interface FullShop {
  address: string;
  categories: string[];
  distance?: number | null;
  keywords: string[];
  lat: number;
  lng: number;
  name: string;
  rating: number;
  reviews: number;
  thumbnail?: string;
}

FullShop 的字段比BasicShop 多。

我正在尝试定义一个反应组件ShopListItem,它的 prop 类型如下:

type PropType = {
    size: 'sm' | 'md',
    shop: BasicShop | FullShop
}

我希望shop的类型可以由size的值来确定。例如,如果size=sm,则比shop=BasicShopsize=mdshop=FullShop。这样我就可以编写以下代码 没有类型错误:

<ShopListItem size='sm' shop={(object of type BasicShop)} />
<ShopListItem size='md' shop={(object of type FullShop)} />

我怎样才能实现这种行为?

【问题讨论】:

    标签: reactjs typescript


    【解决方案1】:

    将联合类型用于整个定义而不是“结构”中的字段,您将获得discriminate union (or ADT)

    type PropType =
        { size: 'sm', shop: BasicShop }
      | { size: 'md', shop: FullShop }
    

    【讨论】:

    • 我正在解构组件中的道具。如果我访问像 props.sizeprops.shop 这样的道具,一切正常!
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2017-06-20
    相关资源
    最近更新 更多