TypeScript快速入门教程(四)、联合类型 & 交叉类型 & 类型保护

本文详细介绍了TypeScript中的联合类型和交叉类型,通过实例展示了它们在实际编程中的应用。文中提到,联合类型表示一个值可以是多种类型之一,而交叉类型则是将多个类型的所有成员组合在一起。同时,文章还讨论了类型保护的重要性,用于在处理联合类型时确定正确的操作方式。最后,通过水果黄瓜的例子,解释了如何在实际场景中使用交叉类型来创建具备多种特性的对象。
摘要由CSDN通过智能技术生成

文章快速索引:

1、TypeScript快速入门教程(一)、基础类型和变量声明
2、TypeScript快速入门教程(二)、面向对象知识(接口、类、抽象类)
3、TypeScript快速入门教程(三)、函数、范型使用
4、TypeScript快速入门教程(四)、联合类型 & 交叉类型 & 类型保护

联合类型 & 交叉类型 & 类型守护

联合类型交叉类型其实在生活中是一个很常见的案例。

  • 黄瓜,你说他是水果还是蔬菜呢?
  • 番茄是属于水果还是属于蔬菜呢?
  • 那么水果黄瓜呢?

其实我们单纯看黄瓜和番茄的话,其实既可以算是水果,也能算是蔬菜,其实就是场景决定的,我要做菜,它就是蔬菜,拿来生吃,就是水果呗。

基于以上的知识点,我们可以这样理解:

  • 联合类型, 它的类型既可以是 A,也可以是B,伪代码表示的话,就是 A | B
  • 交叉类型, 它的类型包含A的特点,也包含B的特点,伪代码表示的话,就是A & B

根据上面的分析,我们先定义出来一个水果和一个蔬菜的接口方便使用。

水果接口

interface Fruits{

    /**
     * 名称
     */
    name: string

    /**
     * 生吃
     */
    eatRawFood(): void
}

蔬菜接口

interface Vegetables{

    /**
     * 名称
     */
    name: string

    /**
     * 做菜
     */
    cooking() : void
}

1、联合类型

比如一个🍅,我既可以当水果,又可以当做蔬菜烹饪。这种场景下,就不能单独定义一个确定类型了。于是就可以用联合类型(A | B)定义:

function eatTomatoType(type: Fruits | Vegetables) {
	//方法体
}

是不是很完美了,你觉得没有问题?

那么问题又来了~ 😄,发现我开始三理三气的了。

比如我现在有一个🍅,我思考打算怎么吃?

function eatTomatoType(type: Fruits | Vegetables) {
    console.log(type.name);
   	type.cooking() //error
   	type.eatRawFood()  //error
}

假设,我现在还没有想好怎么吃?这个🍅的属性还没有定,我发现根本定不下来用什么方法食用~回到程序,就是发现type.cooking()type.eatRawFood()两个方法都不能正常调用。因为既可以是水果、又可以是蔬菜,让程序陷入了两难。

这个时候,就是该类型保护登场。类型保护最主要的作用就是帮我们确定出来一个合适的操作方式。类型保护是一种处理思维~

仔细看一下代码的代码

function eatTomatoType(type: Fruits | Vegetables) {
    console.log(type.name);
    //类型“Fruits | Vegetables”上不存在属性“cooking”。类型“Fruits”上不存在属性“cooking”。
    // type.cooking()   
    if('eatRawFood' in type){
        //如果type中存在eatRowFood方法,则表示是水果        
        (type as Fruits).eatRawFood()
    } else {
        (type as Vegetables).cooking
    }
}

这里使用了一个判断,'eatRawFood' in type是判断,当前type里面是否包含了eatRawFood方法。如果当前选择的方式是直接生吃,也就是我们之前定义好的水果类型咯。

class Tomato implements Fruits{
    
    name: string = '🍅';
    eatRawFood(): void {
        console.log(`${this.name} 是可以直接生吃的~`);
    }

}
eatTomatoType(new Tomato())

最终会打印出来

🍅
🍅 是可以直接生吃的~

2、交叉类型

我们还是用黄瓜举例,普通的黄瓜直接吃,口感可能就很一般,现在农科院为了让黄瓜能兼具生吃好吃和烹饪好吃的条件,研究了新品种,水果黄瓜登场了~

这个时候的水果黄瓜,如果类型表示的话,伪代码可能就是 黄瓜 & 水果了。

class SuperMarket implements Fruits, Vegetables{
    
    name: string = '🥒放进去了商超里面了';

    cooking(): void {
       console.log(`${this.name}, 可以买来烹饪!`);
    }
    
    eatRawFood(): void {
        console.log(`${this.name}, 可以买来生吃!`);
    }
}


let shoppingCart: Fruits & Vegetables = new SuperMarket();

shoppingCart.cooking()
shoppingCart.eatRawFood()

好了,现在新研制的水果黄瓜上市了,商超的蔬菜和水果柜台都上架了。当你买回去之后,既可以烹饪,又可以直接生吃。

当然这个例子有点牵强,理解问题就ok了。

3、 类型保护

其实类型保护在上面已经用过了,下面介绍一下常用的类型保护方式。

  • in 类型保护
    in 用来判断是否归属于某个类中,上面有用到
'cooking' in Vegetables
  • typeof类型保护
    typeof 是用来比较类型归属
cooking typeof Function
  • instanceof类型保护
    instanceof 主要是用来比较对象
a instanceof A  //判断对象归属
  • 自定义类型保护
    自定义类型保护,其实就是你自己定义的一个条件。
//比如你的条件如下
A && B //只有在满足了以下条件的时候,才是某个安全的类型

感觉各位大佬看到这里,此致~敬礼

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Typescript入门教程是阮一峰编写的一份关于Typescript编程语言的教程,旨在帮助初学者快速掌握这种新兴的编程语言。 Typescript是一种由微软公司研发的开源编程语言,它是JavaScript的超集,为JavaScript添加了静态类型检查、类、接口和其他面向对象编程的特性,可以避免一些常见的错误。 阮一峰的Typescript入门教程通过简单易懂的语言,详细的示例和练习,帮助读者逐步掌握Typescript的语法、开发工具、类型注解、类、接口、泛型等核心概念和技术,同时提供了一些实用的开发方法和技巧。 此外,Typescript入门教程也包括了常见的开发场景,如React、Node.js、Angular等的使用,方便读者将所学知识应用到实际项目中。 总的来说,阮一峰的Typescript入门教程是一份优秀的教程,对于想要学习Typescript的初学者来说是一本不容错过的参考资料。通过这份教程,读者可以快速掌握Typescript编程语言,为进一步开发前端应用打下良好的基础。 ### 回答2: 《TypeScript 入门教程》是阮一峰所编写的一本 TypeScript 的自学教程,教程分为多个章节,每个章节都有一个完整的代码示例供读者参考。整本教材以易于理解和实践性为重点,让初学者能够很快上手 TypeScript 编程。 首先,阮一峰讲解了 TypeScript 的基本概念和语法,包括数据类型、变量声明、函数等等常见的编程语法。其次,他向读者展示如何使用 TypeScript 编写面向对象程序,包括类和继承机制以及接口和泛型等高级特性。最后,教程使用了多个实际的案例来说明 TypeScript 的实战应用,比如如何使用 React 和 Angular 框架开发 Web 应用程序。 整个教程的难度设置适中,既方便初学者学习掌握,同时也考虑到了经验丰富的开发者学习需要。此外,教程的核心内容都有相关的实验代码示例供大家进行实践练习,可以更好的巩固知识点,让读者能够迅速掌握 TypeScript 的所有语言特性。 总的来说,《TypeScript 入门教程》是一本实用的教学材料,任何对 TypeScript 有兴趣的人都可以通过本书快速学习并掌握 TypeScript 的基本语法和用法。对于希望深入了解 TypeScript 的读者来说,本书也为各位提供了很好的参考和实践基础。 ### 回答3: 《TypeScript入门教程》是针对那些想要学习TypeScript的开发人员而编写的一本指南。这本书由知名技术博主阮一峰所写,以简洁明了的语言和大量实例讲解了TypeScript的基本知识和应用。整本书分为七章,从入门到深入,全面涵盖了TypeScript语言的各个方面,从基本类型、函数、类、模块等最基础的概念讲起,到高级的装饰器、泛型、交叉类型联合类型等进一步讲解,最后是实战项目,让读者了解如何在实际项目中使用TypeScript。 该书的内容涵盖了TypeScript语法的方方面面,从入门到高级,读者可以通过详细的讲解,了解到如何使用TypeScript进行类型检查、接口、类、泛型等编程概念;此外,书中也穿插了一些实例,帮助读者更好地理解概念,并且提供了一些实用的编程技巧,加强了读者的实际操作能力。 《TypeScript入门教程》是一本极为优秀的TypeScript学习指南,无论是初学者还是进阶学习者,都可以从中获得实用的知识和技能。阮一峰在编写该书时,考虑了读者的需求,以易懂、实用、全面为出发点,值得交的书籍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值