ts中的交叉类型和联合类型

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()
}

你可能感兴趣的:(ts中的交叉类型和联合类型)