首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【TypeScript】TS交叉类型&联合类型(六)

交叉类型(Intersection types)什么是交叉类型呢?简单来说就是通过**&**符号将多个类型进行合并成一个类型,然后用type来声明新生成的类型。...(Union types)联合类型交叉类型比较相似,联合类型通过|符号连接多个类型从而生成新的类型。...它主要是取多个类型的交集,即多个类型共有的类型才是联合类型最终的类型。...联合类型可以是多个类型其中一个,可做选择,比如:string | number,它的取值可以是string类型也可以是number类型。...,如下:enum Class{ A, B }type C = Class.A | Class;//Class类型我们发现:TS会把字面量类型和枚举成员类型给缩减掉,只剩下原始类型和枚举类型 思考一个问题

35710

TS】506- TypeScript 交叉类型

一、简介 TypeScript 交叉类型是将多个类型合并为一个类型。这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。...,然后通过 & 运算符定义了 IStaff 交叉类型,所以该类型同时拥有 IPerson 和 IWorker 这两种类型的成员。...由上图可知,在混入多个类型时,若存在相同的成员,且成员类型为非基本数据类型,那么是可以成功合并。前面我们已经介绍了 TypeScript 交叉类型相关的知识,最后我们再来举一个实际的使用示例。...当必填参数和可选参数有大部分参数是相同的情况下,我们就可以利用 TypeScript 交叉类型来解决复用问题。...通过交叉类型,可以让我们更好地进行代码复用,并方便地实现把多种类型叠加到一起成为一种新的类型

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    读懂 TS 中联合类型交叉类型的含义

    创建了一个 “重学TypeScript” 的微信群,想加群的小伙伴,加我微信 “semlinker”,备注重学TS。 本文是 ”重学TS“ 系列,第 28 篇文章,感谢您的阅读!...类型 Foo 是包含 foo 和 name 属性的所有对象的集合。 六、了解联合类型交叉类型 有了这些知识,你现在就可以了解联合和交叉类型的含义了。...交叉类型 A & B 表示一个集合,该集合是与类型 A 关联的一组值和与类型 B 关联的一组值的交集。...七、交叉类型的真实示例 联合类型非常普遍,所以让我们关注一个交叉类型的例子。...八、总结 本文为了帮助读者更好地理解 TypeScript 中的联合类型交叉类型,我们引入了文氏图、集合理论及类型和集合之间的关系这些内容。

    6K20

    TypeScript 交叉类型

    一、简介 TypeScript 交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。...,然后通过 & 运算符定义了 IStaff 交叉类型,所以该类型同时拥有 IPerson 和 IWorker 这两种类型的成员。...由上图可知,在混入多个类型时,若存在相同的成员,且成员类型为非基本数据类型,那么是可以成功合并。目前我们已经介绍了 TypeScript 交叉类型相关的知识,最后我们再来举一个实际的使用示例。...当必填参数和可选参数有大部分参数是相同的情况下,我们就可以利用 TypeScript 交叉类型来解决复用问题。...通过交叉类型,可以让我们更好地进行代码复用,并方便地实现把多种类型叠加到一起成为一种新的类型

    1.3K20

    TS 进阶 - 类型系统

    即原本的 number 类型): 通过交叉类型的方式来实现信息的附加: export declare class TagProtector { protected...、类型系统与类型检查 类型 限制数据的可用操作、意义、允许的值的集合,即访问限制与赋值限制 在 TypeScript 中即原始类型、对象类型、函数类型、字面量类型等基础类型,以及类型别名、联合类型等经过类型编程后得到的类型...类型系统 一组为变量、函数等结构分配、实施类型的规则,通过显式地指定或类型推导来分配类型 同时类型系统定义了如何判断类型之间的兼容性:在 TypeScript 中即结构化类型系统 类型检查 确保类型遵循类型系统下的类型兼容性...1 : 2; // 1 字面量类型 < 包含包含该字面量类型的联合类型 原始类型 < 包含该原始类型的联合类型 如果一个联合类型由同一个基础类型类型字面量组成: type Result11 = '...、拼接、转换等 如使用对一个对象类型裁剪得到一个新的对象类型,或将联合类型结构转换到交叉类型结构 集合工具类型 对集合(联合类型)的处理,即交集、并集、差集、补集 模式匹配工具类型 基于 infer

    1.2K50

    TS 进阶 - 类型编程

    使用最广泛的一种类型编程思路:将复杂的工具类型,拆解为由基础工具类型类型工具的组合。...MarkPropsAsOptional< { foo: string, bar: number, baz: boolean, }, 'bar' >; 辅助工具 Flatten,用于将交叉类型结构展平为单层的对象结构...从一维原始类型集合,扩展二维的对象类型,在对象类型之间进行交叉并补集运算,以及对同名属性的各种情况处理。...// 此时是一个无法改变的模板字符串类型,但所有 `Hello ` 开头的字面量类型都会是其子类型 模板字符串类型的主要目的是增强字符串字面量类型的灵活性,进一步增强类型和逻辑代码的关联。...由于模板字符串类型最终产物还是字符串字面量类型,因此只要插槽位置的类型匹配,字符串字面量类型就可以被认为是模板字符串类型的子类型: declare let v1: `${number}.

    76530

    TS 进阶 - 类型工具

    # 联合类型交叉类型 交叉类型,符号 &,即按位与运算符。...而代表按位与的 & ,则需要符合所有类型,才可以说实现了这个交叉类型,即 A & B 需要同时满足 A 与 B 两个类型。...类型交叉类型,其内部同名属性类型同样会按照交叉类型进行合并: type Struct1 = { primitiveProp: string; objectProp: { name:...,联合类型只需要符合成员之一即可,交叉类型需要严格符合每一位成员。...,满足其中一个类型即满足这个联合类型(|) 类型别名、工具类型 交叉类型 创建一组类型集合,满足其中所有类型才满足映射联合类型(&) 类型别名、工具类型 索引签名类型 声明一个拥有任意属性,键值类型一致的接口结构

    87320

    【TypeScript】TS类型守卫(八)

    我正在参加「掘金·启航计划」类型守卫====在前几篇介绍了断言,在使用断言时我们已经确定了变量的类型,确定该类型时一定存在(否则则会欺骗编译,运行时报错),那么为什么还要类型守卫呢?...因为类型断言还是需要借助类型守卫的,类型守卫主要是用来判断未知类型是不是所需要的类型。...Student类型 if(val instanceof Student){ console.log('student' + val.study) }}4、自定义类型TS中有一个关键字...写法:a is b,意思是a是b类型,a是函数参数,也可以是this关键字,this关键字一般用在累中判断,b可以是接口类型,b也可以是number、string等其他合法的TS类型。...这种写法称作类型谓词,使用类型谓词的函数称为类型谓词函数,该函数的返回值必须的boolean类型

    21910

    【TypeScript】TS类型声明(四)

    any(任意类型)声明变量类型为any时编译时会绕过所有类型的检测,直接通过编译阶段的检查可以任意访问属性的方法和属性any类型可以赋值给任意类型如果变量初始没有定义类型,默认为any;经过赋值后,TS...unknow(未知类型)声明变量类型为unknow时安全性更高它用于描述类型不确定的变量,这与any类型相似,但更安全,因为对未知值做任何事情都是不合法的unknown类型只能赋值给any和unknown...类型,any类型可以赋值给任意类型unknown,never 都不允许执行变量的方法以及访问内部属性在unknown没有被断言或细化到一个确切类型之前,unknown不可以赋值给其它类型,除了它自己和any...,强制让ts编译器相信我们在做什么操作void(空类型)声明对象类型为void时返回为空值function func(): void { }声明一个变量为void 时只能将它赋值为 undefined...具有以下特点:never类型是所有类型的子类型,即never类型可以赋值给任何类型。其他任何类型均不是never类型的子类型,即其他类型均不可赋值给never类型,除了never本身。

    21310

    TS内置类型与拓展

    TS内置类型与拓展 TypeScript具有类型系统,且是JavaScript的超集,其可以编译成普通的JavaScript代码,也就是说,其是带有类型检查的JavaScript。...我们可以通过declare关键字来告诉TypeScript,某些变量或者对象已经声明,我们可以选择把这些声明放入.ts或者.d.ts里。...// xxx.ts export const name: string = "1"; // xxxxxx.ts import { name } from "xxx.ts"; console.log(name...): string; // src/index.ts foo({}); 协变与逆变 子类型在编程理论上是一个复杂的话题,而他的复杂之处来自于一对经常会被混淆的现象。...简单来说,协变即类型收敛,逆变即类型发散。在这里由下面的例子引起关于这个问题的讨论,在这里我们定义了一个父类型以及一个子类型,而且我们验证了这个子类型TS中是OK的。

    1.1K10

    【TypeScript】TS类型声明(三)

    enum(枚举)枚举主要分为数字类型枚举、字符串类型枚举、异构。 语法:enum + 变量名,意思是定义了一个叫做“变量名”的枚举类型 优点:定义一些常量,可以清晰地表达意图或创建一组有区别的用例。...:枚举成员类型都是字符串 需要注意以下几个方面:字符串枚举没有反向映射,如果进行反向映射的话,取得的值时undefined;字符串枚举没有递增,需要对每一个字符串枚举类型成员进行赋值,即必须具有初始化表达式...StringValue[0]console.log(stringValueNameA)//undefinedconsole.log(stringValueNameB)//undefined(3)异构含义:枚举类型包括字符串类型和数字类型...oconsole.log(Enum['d'])//undefinedconsole.log(Enum['D'])//dconsole.log(Enum[9])//Econsole.log(Enum[0])//A上面的TS...,字符串类型的枚举成员不能反向映射。

    26010

    【TypeScript】TS条件类型(十二)

    TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS中的三元运算符用法一样,通过判断得到最终结果,TS...条件类型====条件类型允许根据一个或多个条件对类型进行推断,并且还能在在类型级别上进行复杂的逻辑运算和类型操作。一、基本用法当T类型可以赋值给U类型时,则返回X类型,否则返回Y类型。...,也不是其他原始类型四、结合范型使用1.类型删除在联合类型T中删除联合类型U中的成员,T类型中的剩余成员则组成新的类型。...我们可以使用条件类型和 keyof关键字来实现Partial类型,Partial类型TS工具类之一。具体案例如下:type Partial = { [K in keyof T]?...:number}注意:Partial是TS的工具类,所以声明Partial是会报错的,可以换个标识符名称。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    24210
    领券