Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在React Typescript中允许某些道具组合?_Reactjs_Typescript_Types_React Props - Fatal编程技术网

Reactjs 如何在React Typescript中允许某些道具组合?

Reactjs 如何在React Typescript中允许某些道具组合?,reactjs,typescript,types,react-props,Reactjs,Typescript,Types,React Props,我有两个枚举: enum Drink = { WATER = 0, COFFEE = 1, } enum Sugar = { LITTLE = 0, ALOT = 1, } enum Temperature = { COLD = 0, HOT = 1, } 我想要一个react组件,它只接受这个枚举的某些组合,而拒绝其他的 例如,我想接受: WATER & {HOT | COLD} COFFEE & {LITTLE | ALOT} 但我想拒绝: WATER &

我有两个枚举:

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

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

enum Temperature = {
 COLD = 0,
 HOT = 1,
}
我想要一个react组件,它只接受这个枚举的某些组合,而拒绝其他的

例如,我想接受:

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 --> */ />

有什么帮助吗


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;