我所拥有的是两个枚举
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。 我如何实现目标?
答案 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