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);
热门推荐
苹果采后如何贮藏保鲜,掌握这几点关键要点!
日式性冷淡家居装修(日式性冷淡装修风格)
途观L变速箱养护指南:从日常维护到故障处理
如何应对原材料价格上涨的问题?这种价格波动对生产成本有什么影响?
将室外植物移到室内
植物原料在提取前需要经过哪些重要的预处理步骤?
八段锦+中国舞 ,公益课程让“银发生活”更精彩
期前收缩和早搏的区别
怎么测静息心率
Git版本选择指南:如何选择最适合你的Git版本?
如何设计单元测试用例?
如何区分市区和郊区?广深都有了官方认定
从一到无穷——张纯如的力量
意识与大脑:科学新发现如何解读人类思维
新会陈皮的前世今生:从称谓演变品陈香岁月
《2025年全球食品原料趋势洞察》报告,解读食品饮料3大创新趋势
滤波器基础知识:电容的应用
细胞培养和传代
红酒需要醒酒多长时间?类型、口味与温度是关键!
中山市沙溪隆都医院:二级甲等综合医院,重点发展外科与妇产科
10种不怕太阳晒的盆栽绿植 耐晒耐热的阳台开花植物
多管齐下 多点发力 江苏金融积极支持区域经济高质量发展
姑苏纪事:苏州评弹,历史、流派与故事的唯美交织
蚂蚁集团发内部信调整薪酬发放政策!是共同富裕,还是变相降本?
诉讼全阶段证据清单模板:收件、签收及证据目录
鲍威尔强调"谨慎"降息 大选后美联储政策将如何取向?
成本价高于售价 低价宠物粮从何而来?
央视调查:全国最大宠物食品生产基地劣质粮横行,企业竟用羽毛粉、石粉等劣质原料
吃什么健康的食物能长胖一点呢
哈佛大学发现,无需天天运动,只在周末适量运动,就能降低200多种疾病患病风险