【问题标题】:How to allow certain combinations of props in React Typescript?如何在 React Typescript 中允许某些道具组合?
【发布时间】:2021-05-22 09:51:43
【问题描述】:

我有两个枚举:

enum Drink = {
 WATER = 0,
 COFFEE = 1,
}

enum Sugar = {
 LITTLE = 0,
 ALOT = 1,
}

enum Temperature = {
 COLD = 0,
 HOT = 1,
}

我想要一个反应组件,它只接受这个枚举的某些组合并拒绝其他的。

比如我想接受:

WATER & {HOT | COLD}
COFFEE & {LITTLE | ALOT}

但我想拒绝:

WATER & SUGAR
or
COFFEE & COLD

我尝试制作这种类型:

type someType = {
   drink: Drink.WATER
   temperature: Temperature.HOT | Temperature.COLD
} | 
{
   drink: Drink.COFFEE
   sugar: Sugar.LITTLE | Sugar.ALOT
}

但这并不好。

我希望将它们作为单独的道具,例如当用户尝试键入时:

<SpecificCompo drink={water} /*<-- here don't display sugar={} or if the user tries to type it, i want typescript to complain that type of water doesn't match with sugar --> */ />

对此有什么帮助吗?

【问题讨论】:

    标签: reactjs typescript types react-props


    【解决方案1】:
    
    enum Drink {
        WATER = 0,
        COFFEE = 1,
    }
    
    enum Sugar {
        LITTLE = 0,
        ALOT = 1,
    }
    
    enum Temperature {
        COLD = 0,
        HOT = 1,
    }
    
    interface BaseProps {
        // Whatever props
    }
    
    interface WaterProps extends BaseProps {
        drink: Drink.WATER,
        temperature: Temperature.HOT | Temperature.COLD
    }
    
    interface CoffeeProps extends BaseProps {
        drink: Drink.COFFEE,
        sugar: Sugar.LITTLE | Sugar.ALOT
    }
    
    export type ISpecificCompoProps = WaterProps | CoffeeProps;
    

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2020-06-23
      • 2021-03-22
      • 2018-07-09
      • 2021-12-25
      • 2021-12-29
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多