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);
热门推荐
从巩义到长沙县,自驾游攻略大揭秘!
福清海蛎饼:舌尖上的美味诱惑!
石竹山风景区:福清必打卡自然景观推荐
福清一日游:打卡永鸿野生动物世界+东方第一漂!
最近爆火!这种茶饮减脂抗老保护心血管:但一类人需注意
秋冬进补先“饮茶”,这10款中药茶饮上线啦!
两类人员最愿开个人养老金账户 抵税引发广泛关注
个人养老金账户如何进行资金管理?
个人养老金:85只指数基金怎么选?
新疆艺人在春晚:用奋斗精神点亮舞台
塔克拉玛干锁边工程登上春晚舞台
《哪吒之魔童闹海》票房破8亿!揭秘这部现象级动画电影背后的故事
《哪吒之魔童闹海》票房破4亿:文化现象背后的故事
御岳山火山喷发背后的科技谜团:为什么没能提前预警?
夏威夷火山喷发预警:气候变化的信号?
基拉韦厄火山喷发:航天技术预警新突破
急性胰腺炎应该如何预防?
攸曼防护围栏:守护孩子的安全
煜字取名的寓意解析
探索“煜”字背后的文化与寓意
青石龙柱:寺庙守护神的文化密码
揭秘寺庙石雕龙柱的艺术魅力
“双十一”白酒破价常态化 酒企沉默应对“保真”难题
春节亲子游新宠:长白山滑雪小镇
哈尔滨冰雪大世界:春节带娃打卡必去的冰雪城堡
春节亲子游攻略:15个精华目的地详解
双十一选购儿童床:安全第一!
胰腺炎中药治疗方法有几种
胰腺炎的预防与治疗
八大守护神对应生肖,揭示专属守护神的属相密码