TypeScript高级类型:联合类型、交叉类型和类型别名

这篇具有很好参考价值的文章主要介绍了TypeScript高级类型:联合类型、交叉类型和类型别名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

TypeScript 是一门强类型语言,其高级类型功能使得开发者能够更加灵活地定义类型并对其进行操作,以便于更好地编写可维护和可扩展的代码。
在本文中,将着重讨论三种高级类型:联合类型、交叉类型和类型别名。我们将详细介绍这些类型,并且还会提供一些有用的代码示例。

联合类型

  • 联合类型是最常见的高级类型之一,是指一个变量可以有不同的数据类型,通过 | 符号来表示,它的目的是将多个类型组合成一个类型。这些类型可以是基本类型,也可以是自定义类型
    // 联合类型的基本用法
    let myVar: string | number;
    myVar = 'hello';
    myVar = 123;
    
  • 在这里,我们定义了一个 myVar 变量,它可以是字符串或数字类型。我们可以将任何一个字符串或数字赋给 myVar 变量。
  • 联合类型用于在编写代码时可以接受多种类型的情况。例如,如果我们希望接受一个参数,它可能是字符串或数字,我们可以使用联合类型。示例如下:
    // 在函数的形参中使用联合类型
    function printId(id: number | string) {
        console.log(`id is ${id}`);
    }
    printId(101); // 输出:id is 101 printId("abc"); // 输出:id is abc
    
  • 在上面的代码中,我们定义了一个名为 printId 的函数,它接受一个参数 id ,它可以是数字或字符串。
    // 自定义类型
    interface Cat {
        name: string;
        purr: () => void;
    }
    interface Dog {
        name: string;
        bark: () => void;
    }
    function feedPet(pet: Cat | Dog) {
        console.log("Feeding " + pet.name);
        if ("purr" in pet) {
            pet.purr();
        } else if ("bark" in pet) {
            pet.bark();
        }
    }
    
  • 在这个例子中,我们定义了一个 feedPet 函数,它接受一个参数 pet ,这个参数是 Cat 或 Dog 类型。当我们调用这个函数时,我们可以传递一个猫或狗的对象。在函数体内,我们检查 pet 对象是否有“ purr ”或“ bark ”属性,然后相应
    地调用 pet 的方法。

联合类型的优点是在一些情况下可以简化代码,但缺点是会降低代码的可读性和可维护性。当联合类型过多时,代码的复杂度会显著增加。

交叉类型

  • 交叉类型是将多个类型组合成一个类型,通过 & 符号来表示。这些类型可以同时拥有所有类型的属性和方法。我们可以将交叉类型看作是“并集”类型。示例如下:
    interface Person {
        name: string;
        age: number;
    }
    interface Employee {
        company: string;
    }
    type EmployeePerson = Employee & Person;
    const employeePerson: EmployeePerson = {
        name: "John",
        age: 30,
        company: "ABC Inc",
    };
    console.log(employeePerson); // 输出:{ name: 'John', age: 30, company: 'ABC Inc' }
    
  • 在上面的代码中,我们定义了两个接口 Person 和 Employee 。Person 接口定义了一个人的属性(名称和年龄),而 Employee 接口定义了一个雇员的属性(公司)。我们使用 & 符号定义 EmployeePerson 类型,这个类型将 Person 和 Employee 类型组合成一个类型。最后,我们创建了一个 EmployeePerson 类型的对象,并输出它的属性。
  • 再来看一个例子:
    interface Student {
        name: string;
        age: number;
    }
    interface Teacher {
        name: string;
        teachingSubject: string;
    }
    type StudentTeacher = Student & Teacher;
    let jenny: StudentTeacher = {
        name: 'Jenny',
        age: 25,
        teachingSubject: 'Math'
    }
    
  • 在这里,我们定义了两个接口:Student 和 Teacher 。我们还定义了一个类型别名 StudentTeacher ,它是 Student 和 Teacher 的交集。然后我们创建一个 StudentTeacher 类型的变量 jenny ,它包含 name、age 和 teachingSubject 属性。

交叉类型的优点是可以让我们快速定义具有多种属性和方法的对象类型,但缺点是当交叉类型过多时,代码的复杂度也会显著增加。

类型别名

  • 类型别名是一种命名类型的方式,是指为一种类型定义一个新名字。类型别名可以代替较长或重复的类型定义。在 TypeScript 中,我们可以使用 type 关键字 来创建类型别名。例如:
    type UserId = number | string;
    function printUserId(id: UserId) {
        console.log(`id is ${id}`);
    }
    printUserId(101); // 输出:id is 101
    printUserId("abc"); // 输出:id is abc
    
  • 在上面的代码中,我们使用type关键字定义了一个类型别名 UserId ,它可以是数字或字符串。我们定义了一个名为 printUserId 的函数来接受 UserId 类型的参数。最后,我们调用这个函数两次,分别传递数字和字符串参数。
  • 再来看一个例子
    type User = {
        name: string;
        age: number;
        email: string;
    }
    type UserID = string | number;
    type UserCollection = Record<UserID, User>;
    let users: UserCollection = {
        one: {
            name: 'Tom',
            age: 20,
            email: 'tom@example.com'
        },
        two: {
            name: 'Jerry',
            age: 22,
            email: 'jerry@example.com'
        }
    }
    
  • 在这里,我们定义了一个类型别名 User ,它代表一个用户对象,包含 name 、age 和 email 属性。我们还定义了一个类型别名 UserID ,它是字符串或数字类型。最后,我们定义了一个类型别名 UserCollection ,它是一个以 UserID 为键,User 为值的 Record 对象,表示一个用户集合。在示例中,我们创建了一个 UserCollection 对象 users ,包含两个用户对象,它们的 ID 分别为 one 和 two 。

类型别名的优点是可以让我们轻松地定义复杂的类型,同时也可以让代码更加易读易懂。但缺点是过度使用类型别名会让代码变得冗长而难以维护。

注意

TypeScript 高级类型的联合类型、交叉类型和类型别名各具优点,我们可以在不同场景下合理地使用它们。需要注意的是,过度使用高级类型会导致代码的复杂度增加,影响代码的可读性和可维护性。因此,在使用高级类型时需要慎重考虑

结论

在本文中,我们介绍了三种高级类型:联合类型交叉类型类型别名。这些类型可以帮助我们更好地编写可维护和可扩展的代码。我们建议您在编写代码时使用这些类型,以提高代码的可读性和可维护性。文章来源地址https://www.toymoban.com/news/detail-499591.html

到了这里,关于TypeScript高级类型:联合类型、交叉类型和类型别名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeScript 类型别名(Type Aliases)

    在 TypeScript 中,类型别名(Type Aliases)是一种给现有类型起别名的方式。它可以帮助提高代码的可读性和可维护性,尤其是当你需要使用复杂或重复的类型注解时。 基本使用 本段代码使用了类型别名  N1  来表示一个可以是  number 、 string  或者  boolean  类型的联合类型。接

    2024年02月13日
    浏览(32)
  • TypeScript 学习笔记(二):接口与类型别名、字面量类型

    在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些

    2024年02月16日
    浏览(37)
  • typeScript中的类型断言和类型别名、字符串字面量类型

    目录 1.类型断言 语法  2.类型断言的用途 2.1 将一个联合类型断言为其中一个类型   2.2 将一个父类断言为更加具体的子类  2.3 将任何一个类型断言为 any 2.4 将 any 断言为一个具体的类型 类型断言的限制 双重断言 类型断言 vs 类型转换 类型断言 vs 类型声明 类型断言 vs

    2024年02月04日
    浏览(38)
  • TypeScript 联合类型,类型推断,类型断言

    取值可以为多种类型中的一个 当变量需要调用某属性的时候,有不确定当前的类型是什么,可以使用类型断言; 类型断言的两种方式: 1,类型 变量名; 2,值 as 类型; 没有明确的指定类型的情况下推断出一个类型;

    2024年02月15日
    浏览(37)
  • typescript & 交叉类型

    TypeScript中的交叉类型是指将多个类型合并为一个类型。这使得我们可以将现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。 写这篇文章先问大家一个问题,如何让一个对象既有a类型约束,又有b类型约束? 如果你看了我这篇文章typescrip接口 interface详解

    2024年02月07日
    浏览(35)
  • Typescript的类型推导与联合类型

    考虑以下 TypeScript 代码片段: 1、请解释 processInput 函数的作用和输入参数的类型。 2、解释变量 example1 和 example2 的类型注解。 3、描述 TypeScript 在调用 processInput(example1) 和 processInput(example2) 时是如何进行类型推导的。 解答: 1、processInput 函数接受一个参数 input,该参数的类

    2024年01月21日
    浏览(53)
  • TypeScript中的对象类型(可选属性 只读属性 交叉类型)

    一、定义对象类型 在TypeScript中定义对象类型有以下三种方式: 1. 匿名对象类型 匿名对象类型是在定义变量时直接使用花括号{},来定义一个对象类型。例如: 上述代码中定义了一个person变量,它的类型为对象,它有两个属性:name和age,其中name属性的类型为字符串,age属性

    2024年02月11日
    浏览(47)
  • TypeScript 中的字面量类型和联合类型特性

    字面量类型和联合类型是 TypeScript 中常用的类型特性。 1. 字面量类型: 字面量类型是指具体的值作为类型。例如,字符串字面量类型可以通过给定的字符串字面量来限制变量的取值范围。 2. 联合类型: 联合类型可以用来表示一个变量可以是多个类型中的任意一个。使用 |

    2024年02月15日
    浏览(39)
  • 前端TypeScript学习day04-交叉类型与泛型

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)            目录 交叉类型 泛型 创建泛型函数 调用泛型函数: 简化调用泛型函数: 泛型约束  指定更加具体的类型 添加约束  泛型接口  泛型类 泛型工具类型  Partial 

    2024年02月08日
    浏览(41)
  • TypeScript之高级类型

    除了 string 、 number 、 boolean  这种基础类型外,在  typescript  类型声明中还存在一些高级的类型应用 这些高级类型,是 typescript 为了保证语言的灵活性,所使用的一些语言特性。这些特性有助于我们应对复杂多变的开发场景 常见的高级类型有如下: 交叉类型 联合类型 类型

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包