TypeScript的联合类型和交叉类型
创作时间:
作者:
@小白创作中心
TypeScript的联合类型和交叉类型
引用
CSDN
1.
https://blog.csdn.net/yusirxiaer/article/details/136480897
联合类型
在 TypeScript 中,可以使用联合类型来定义对象接口,从而表示一个对象可以具有多种不同结构的类型。联合类型是或的关系!!!
interface Circle {
kind: "circle";
radius: number;
}
interface Square {
kind: "square";
sideLength: number;
}
type Shape = Circle | Square;
const circle: Shape = { kind: "circle", radius: 5 };
const square: Shape = { kind: "square", sideLength: 4 };
如果如下方错误写法,为什么会报错呢?
const circle: Shape = { kind: "circle", radius: 5 , sideLength: 4};
circle.kind// 可以访问
circle.radius// 会报错
circle.sideLength // 会报错
circle.kind// 可以访问
circle.radius// 会报错
circle.sideLength // 会报错
在 TypeScript 中,当使用联合类型时,一个对象只能包含联合类型中共有的属性。在你的示例中,
Circle
接口有属性 kind和 radius,而
Square
接口有属性 kind和 sideLength 。
因此,当你将它们组合成联合类型Shape时,对象只能是{
kind: "circle";
radius: number;
},或者{
kind: "square";
sideLength: number;
}。
在这种情况下,circle对象可以包含 kind 属性,但它不能同时包含 radius 和 sideLength 属性。因此,当你尝试访问 circle.radius 时会报错,因为 radius 属性并不属于 circle对象。
如果你希望创建一个对象同时包含 kind、radius 和sideLength 属性,你需要使用交叉类型(
&
)而不是联合类型(
|
)。
交叉类型
在 TypeScript 中,使用交叉类型创建新类型时,对象必须包含交叉类型中所有属性。
交叉类型&是与的关系是并集!!!
interface Animal {
name: string;
}
interface Mammal {
hasFur: boolean;
numberOfLegs: number;
}
// 使用交叉类型组合 Animal 和 Mammal 接口
type MammalAnimal = Animal & Mammal;
const dog: MammalAnimal = {
name: "Dog",
hasFur: true,
numberOfLegs: 4
};
console.log(dog);
热门推荐
汕头美食攻略必去十大名店?哪家美食多?
《哈利波特》同款:德拉科·马尔福3D打印配饰制作指南
《哪吒之魔童闹海》:敖丙新形象揭秘
哪吒闹海:敖丙的悲剧英雄之路
揭秘可乐真面目:快乐背后的风险!
win10如何开启NVIDIA光线追踪?
如何保护银行账户的安全?
高技术的颗粒捕捉器,是如何工作的呢?了解多少?
颗粒捕捉器工作原理及堵塞处理全攻略
夏日解暑神器?小心这些饮料“甜过头”
秋冬养花指南:四季茶花养护全攻略
山茶花的色彩密码:从基因到育种的科学探索
金色山茶花的秘密:从基因到颜色
兰州浆水解锁“新功能”
中风患者喝什么茶:营养丰富、健有效的茶推荐
中风后可以喝茶叶吗?中风患者喝茶的注意事项
“思辨·探索未知”教学研讨会聚焦新媒体时代学生思辨力培养
如何培养学生的思辨能力
2026年米兰冬奥会赛程公布
办一次奥运会,到底要花多少钱?
血脂究竟对脑部健康有什么影响?
平壤大捷:明朝抗倭援朝的关键一战
万历朝鲜之役:明朝援朝背后的故事
村支书违法?教你合法举报!
哪吒师父太乙真人:中国神话里的超级导师
《哪吒2》太乙真人:四川话里的仙人笑匠
中国英歌舞“出海”背后的故事
胡歌解说《布达拉宫》:一场心灵的洗礼
秋天的承德小布达拉宫,庄严肃穆不容错过!
2024最新最全AGI发展综述