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()
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。