如何解决在Typescript中声明相交类型?
我已经开始从官方文档中学习打字稿,并且遇到了交叉类型的话题。因此,为了正确理解类型交集是如何工作的,我决定编写一个自定义类型。 FoodItems接口必须是对象数组,并且侧面相同。但是,每当我尝试将两种类型相交时,Foodorder的每种表示都会失败。我不明白为什么会这样以及我在做什么错。
alloca
声明interface FoodItems {
[index: number]: {name: string,quantityPerOrder: number};
}
interface FoodSide {
[index: number]: {sideName: string,sideQuantity: number};
}
let foodItem: FoodItems = [{name: "Fried Chiken",quantityPerOrder: 2},{name: "Burger",quantityPerOrder: 1}];
let foodSide: FoodSide = [{sideName: "gravy",sideQuantity: 1}];
type Foodorder = FoodItems & FoodSide;
let food: Foodorder;
给了我以下错误:
let food: Foodorder = [[{name: "Fried Chiken",quantityPerOrder: 2}],[{sideName: "gravy",sideQuantity: 1}]];
解决方法
交叉点类型要求food
既是有效的FoodItems
对象,又是有效的{{1 }}对象。
请记住:交集类型FoodSide
表示类型I = A & B
的值集是交集类型的 intersection 类型I
和A
。由于类型B
的每个值同时是 有效的I
和有效的A
,因此 properties 相交类型B
的类型必须是类型I
和A
的属性的 union 。
同样,联合类型B
表示类型U = A | B
的值集合是的值集合的 union 类型U
和A
。由于类型B
的每个值都是有效的U
的 或有效的A
的,因此得出属性联合类型B
的必须是类型U
和A
的属性的 intersection 。
因此,您要说的是B
是一种可以用数字索引的类型,它返回一个FoodOrder
,但同时 也会返回FoodItems
(按数字索引)。
这种类型的值不存在,因此您实际上无法构造任何合法的分配给FoodSide
的值。
可能可能是这样的:
food
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。