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

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

  • 相关阅读:
    WPF项目-按着键盘方向键,移动格子盒子效果
    记一次docker的mysql损坏修复经历
    js数组常用方法
    ant使用import导入另外一个build文件到当前项目中
    10.18~10.22数电第二次实验
    Nginx_day02_Nginx进阶篇_静态资源部署
    Go-Python-Java-C-LeetCode高分解法-第七周合集
    python数据分析基础(1)
    从零手写实现 nginx-19-HTTP CORS(Cross-Origin Resource Sharing,跨源资源共享)介绍+解决方案
    基于Xml方式Bean的配置-命名空间种类
  • 原文地址:https://blog.csdn.net/xuelian3015/article/details/140408271