1.交叉类型
将多个类型合并成一个类型,该类型具有所有类型的特性(取他们类型的合集)
interface myInter1 {
name:string;
fun1():void
}
interface myInter2 {
fun2():void
}
// 此时定义的jcType是myInter1和myInter2的交叉类型,其中必须包含这两个接口中定义的属性
let jcType :myInter1 & myInter2 = {
name:'haha',
fun1() {},
fun2() {},
}
2.联合类型
相当于取他们类型的交集,可以给变量定义多个类型。
// 联合类型 (只需满足其中一个接口类型所定义的属性)
let lhType : myInter1 | myInter2={
name:'',
fun1(): void {}
}
class Dog1{
constructor(public name: string) {}
run(){
console.log(this.name)
}
}
class Dog2{
constructor(public age: number) {}
run(){
console.log(this.age)
}
}
// 如果变量类型是多个类的联和,那么
function f(num:number) {
let lhType = num===1?new Dog1('rose'):new Dog2(3)
// 此时lhType去调用类中的方法时,只能调用他们的相同属性名的值
lhType.run()
}