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);
热门推荐
税收学专业求职者怎样写好技能特长
公积金补缴应提交哪些材料
甲磺酸阿美替尼片(阿美乐)药品说明书
《寻味顺德》:探寻美食之都的前世今生
ChatGPT大模型:技术场景与商业应用
如何报销大病保险住院费用?报销流程有哪些要点?
Excel表格数据排序的多种方法与实战技巧
1981年的我,选择60岁、63岁和66岁退休,养老金分别怎么算?
元气骑士所有免费角色分析攻略(不包括气宗)
外热内冷人格:特点、表现、挑战与应对方法
《好东西》影评:幽默背后的女性主义与家庭成长探讨
对二手烟说“不”
茶香世界:生普熟普那些事儿,一文读懂两者间的特色与区别
卧式摆线针轮减速机在各行业的应用
监控网络隔离:防止非法访问的四种方法
发动机烧机油的原因有哪些?怎样预防发动机烧机油?
用人单位应向劳动者出具“离职证明”的相关法规
眼睛红流眼泪解析:病因、治疗与日常保健
服用6类药物,可能让你彻夜难眠
如何用纯文字在朋友圈中有效表达情感与生活点滴
人际交往中的“变色龙效应”
慢淋出现什么症状再治疗
差分信号电路的工作原理与应用
还不会发面?一次教你10个发面小技巧,做面食不再难!
丝瓜种子催芽方法及如何判断催芽是否完成,盆栽的丝瓜如何种植?
物流管理的新视角:数字化时代下的供应链挑战与创新战略
2024年度中国商学院MBA项目TOP100榜单正式发布
德比鞋类型(德比鞋是什么风格特点)
Win11系统没有蓝牙驱动如何安装-五种实用解决方案
专家系统(ES)