联合类型的枚举参数?

时间:2018-06-07 07:44:05

标签: typescript react-native enums union

我所拥有的是两个枚举

enum Fruit { Apples, Oranges };
enum Vegetable { Garlic, Cucumber };

和类型

type Food = Fruit | Vegetable;

现在我想创建另一种类型的函数,并将食物作为参数

type OnViewFood = (food: Food) => void;

但是当我做的时候

viewFruit: OnViewFood = (fruit: Fruit) => `This is ${fruit}`;

我收到的错误是Food不能分配给Fruit。 我如何实现目标?

1 个答案:

答案 0 :(得分:1)

编译器不希望您这样做的原因是因为它本质上不安全。考虑这个例子是否有效:

.ai

你可以声明let viewFruit: OnViewFood = (fruit: Fruit) => `This is ${fruit}`; // we assign a function that can only handle Fruit. viewFruit(Vegetable.Cucumber); // the declared signature allows us to use a Vegetable, possibly causing an error 是一个函数联合,但随后调用成为一个问题,因为你无法调用函数联合而且你不能轻易打字:

OnViewFood

在任何一种情况下,我们都可以使用类型断言来解决类型错误,您可以选择任一选项,具体取决于您更信任哪一方,函数创建者方或调用方:

type OnViewFood = ((food: Fruit) => void) | ((food: Vegetable) => void);
let viewFruit: OnViewFood = (fruit: Fruit) => `This is ${fruit}`; // ok now can be either function signature 
viewFruit(Vegetable.Cucumber); // now an error