• 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)可以帮助你安全地处理不同的情况。

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

  • 相关阅读:
    改进YOLOv7系列:首发最新结合Non-local Networks and Attention结构(附YOLOv5改进),目标检测高效涨点
    java中switch同if关键字的不同之处
    网络基础学习系列三http
    Python做一个中秋节嫦娥投食小游戏
    Unity中使用VS常用技巧
    04 【布局之Overscroll Behavior 定位偏移量】
    Kotlin 核心语法,为什么选择Kotlin ?
    Spring Data JPA where in 超过 1000 解决方案
    python爬虫
    结构体初阶
  • 原文地址:https://blog.csdn.net/xuelian3015/article/details/140408271