• Typescript 的联合类型和交叉类型


    在TypeScript中,联合类型(Union Types)和交叉类型(Intersection Types)是两种非常重要的类型系统特性,它们允许你以更灵活和强大的方式表示复杂的类型结构。

    联合类型(Union Types)

    联合类型允许一个变量接受几种类型中的任意一种。使用|操作符来定义联合类型。

    语法示例

    let myVar: string | number;
    myVar = "Hello"; // 正确
    myVar = 42;      // 正确
    // myVar = true; // 错误,因为true不是string或number
    

    在上面的例子中,myVar变量可以是string类型或number类型。尝试给它赋一个boolean类型的值会导致编译错误。

    交叉类型(Intersection Types)

    交叉类型允许你将多个类型合并为一个类型,这个新类型将包含所有类型的属性和方法。使用&操作符来定义交叉类型。

    语法示例

    interface Dog {
        bark(): void;
    }
    
    interface Cat {
        meow(): void;
    }
    
    type DogCat = Dog & Cat;
    
    // 假设有这样的实现
    class Animal implements DogCat {
        bark() {
            console.log('Woof!');
        }
    
        meow() {
            console.log('Meow!');
        }
    }
    
    let myPet: DogCat = new Animal();
    myPet.bark(); // 正确
    myPet.meow(); // 正确
    

    在这个例子中,DogCat类型同时包含了DogCat接口的所有属性和方法。这意味着,任何DogCat类型的实例都必须同时实现bark()meow()方法。

    使用场景

    • 联合类型非常适合那些在不同情况下可以是不同类型的情况。例如,一个函数可能根据某些条件返回不同的类型,或者一个变量可能在不同阶段有不同的类型。

    • 交叉类型在需要合并多个类型的功能时非常有用。例如,你可能有一个通用的对象,同时需要添加一些特定的方法或属性,而不想通过继承来实现(可能是为了避免继承的复杂性或限制)。

    注意事项

    • 在使用联合类型时,TypeScript的类型守卫(Type Guards)和类型断言(Type Assertions)可以帮助你安全地处理不同的情况。

    • 交叉类型在合并接口时非常强大,但也要注意不要创建过于复杂的类型结构,以免增加代码的复杂性和理解难度。

  • 相关阅读:
    小学数学题AI自动出题系统源码,支持在线打印及导出PDF!
    69页完整版智慧港口综合解决方案
    在受污染的二叉树中查找元素 C++
    【网页前端】CSS进阶综合案例
    力扣 857. 雇佣 K 名工人的最低成本
    【离散化】【 树状树状 】100246 将元素分配到两个数组中
    Apache和Nginx实现虚拟主机的3种方式
    数字化时代,VR全景营销的优势在哪里?
    云原生之Docker
    线程池核心原理浅析
  • 原文地址:https://blog.csdn.net/xuelian3015/article/details/140408271