交叉类型(Intersection types)什么是交叉类型呢?简单来说就是通过**&**符号将多个类型进行合并成一个类型,然后用type来声明新生成的类型。...(Union types)联合类型和交叉类型比较相似,联合类型通过|符号连接多个类型从而生成新的类型。...它主要是取多个类型的交集,即多个类型共有的类型才是联合类型最终的类型。...联合类型可以是多个类型其中一个,可做选择,比如:string | number,它的取值可以是string类型也可以是number类型。...,如下:enum Class{ A, B }type C = Class.A | Class;//Class类型我们发现:TS会把字面量类型和枚举成员类型给缩减掉,只剩下原始类型和枚举类型 思考一个问题
一、简介 TypeScript 交叉类型是将多个类型合并为一个类型。这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。...,然后通过 & 运算符定义了 IStaff 交叉类型,所以该类型同时拥有 IPerson 和 IWorker 这两种类型的成员。...由上图可知,在混入多个类型时,若存在相同的成员,且成员类型为非基本数据类型,那么是可以成功合并。前面我们已经介绍了 TypeScript 交叉类型相关的知识,最后我们再来举一个实际的使用示例。...当必填参数和可选参数有大部分参数是相同的情况下,我们就可以利用 TypeScript 交叉类型来解决复用问题。...通过交叉类型,可以让我们更好地进行代码复用,并方便地实现把多种类型叠加到一起成为一种新的类型。
创建了一个 “重学TypeScript” 的微信群,想加群的小伙伴,加我微信 “semlinker”,备注重学TS。 本文是 ”重学TS“ 系列,第 28 篇文章,感谢您的阅读!...类型 Foo 是包含 foo 和 name 属性的所有对象的集合。 六、了解联合类型和交叉类型 有了这些知识,你现在就可以了解联合和交叉类型的含义了。...交叉类型 A & B 表示一个集合,该集合是与类型 A 关联的一组值和与类型 B 关联的一组值的交集。...七、交叉类型的真实示例 联合类型非常普遍,所以让我们关注一个交叉类型的例子。...八、总结 本文为了帮助读者更好地理解 TypeScript 中的联合类型和交叉类型,我们引入了文氏图、集合理论及类型和集合之间的关系这些内容。
keyof 获取类型内所有的 key,即所有属性名 , 获取的是一个 联合类型 这里类型指:通过 interface 或 type 定义的类型;通过 typeof xxx 返回的类型等。...一般循环的是 联合类型,把联合类型中每一个属性名赋值给 P // 使用上面的 T 类型 type TObj = { [P in keyof T]: any } // 等同于...type TObj = { name: any; age: any; sex: any; } typeof ts 中 typeof 是获取数据的类型,常用用于获取 对象、数组...K 类型,并返回新的类型,这里 T 常用于对象类型 type Pick = { [P in K]: T[P]; }; // keyof T...,如果对象上有类型则使用定义的类型
一、简介 TypeScript 交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。...,然后通过 & 运算符定义了 IStaff 交叉类型,所以该类型同时拥有 IPerson 和 IWorker 这两种类型的成员。...由上图可知,在混入多个类型时,若存在相同的成员,且成员类型为非基本数据类型,那么是可以成功合并。目前我们已经介绍了 TypeScript 交叉类型相关的知识,最后我们再来举一个实际的使用示例。...当必填参数和可选参数有大部分参数是相同的情况下,我们就可以利用 TypeScript 交叉类型来解决复用问题。...通过交叉类型,可以让我们更好地进行代码复用,并方便地实现把多种类型叠加到一起成为一种新的类型。
一、交叉类型(Intersection types)什么事交叉类型呢?简单来说就是通过&符号将多个类型进行合并成一个类型,然后用type来声明新生成的类型。...这里分两种情况,如果同名属性的类型相同则合并后还是原本类型,如果类型不同,则合并后类型为never2.基本数据类型交叉any和number交叉结果是any类型,any和boolean交叉结果是any类型...,当键的类型是不同的字面量类型,则交叉后类型为never类型。...ts中函数重载来实现。...,如下:enum Class{ A, B }type C = Class.A | Class;//Class类型我们发现:TS会把字面量类型和枚举成员类型给缩减掉,只剩下原始类型和枚举类型思考一个问题
// 1布尔类型 let bool:boolean bool=true // 数值类型(支持多种进制) let num:number num=1; num=0b1111011 num=0o173 num...=0x7b // 字符类型 let str:string str='22' str=`${bool}333` // 数组 let arr:number[] arr=[2] // 写法2 let arr1...:string[] arr1=['33','333'] let arr2:(string|boolean|number)[] arr2=[3,true,'ss'] // 元组类型(长度和类型必须一一对应...consoleText=(text)=>{ console.log(text); } let v:void v=undefined v=null // null 和undefined(除了(never)是所有类型的子类型...,可以赋值给任何类型) let u:undefined u=null let n:null n=undefined // never类型(永远没有结果的函数) let errorFunc=(message
即原本的 number 类型): 通过交叉类型的方式来实现信息的附加: export declare class TagProtector { protected...、类型系统与类型检查 类型 限制数据的可用操作、意义、允许的值的集合,即访问限制与赋值限制 在 TypeScript 中即原始类型、对象类型、函数类型、字面量类型等基础类型,以及类型别名、联合类型等经过类型编程后得到的类型...类型系统 一组为变量、函数等结构分配、实施类型的规则,通过显式地指定或类型推导来分配类型 同时类型系统定义了如何判断类型之间的兼容性:在 TypeScript 中即结构化类型系统 类型检查 确保类型遵循类型系统下的类型兼容性...1 : 2; // 1 字面量类型 < 包含包含该字面量类型的联合类型 原始类型 < 包含该原始类型的联合类型 如果一个联合类型由同一个基础类型的类型字面量组成: type Result11 = '...、拼接、转换等 如使用对一个对象类型裁剪得到一个新的对象类型,或将联合类型结构转换到交叉类型结构 集合工具类型 对集合(联合类型)的处理,即交集、并集、差集、补集 模式匹配工具类型 基于 infer
TypeScript 中的联合类型(Union Types)允许您将多个不同的类型组合成一个类型,表示一个值可以是这些类型中的任何一个。...联合类型使用 | 运算符定义,以下是详细介绍和多个示例:联合类型的定义联合类型使用 | 运算符将多个类型组合在一起,如下所示:type Type1 = number;type Type2 = string...,它可以包含数字和字符串,并根据元素的类型执行不同的操作。...,可以是数字或字符串,然后根据返回值的类型执行不同的操作。...add 函数的多个重载,以处理不同类型的参数和返回值。
# 学习方法 # 最佳学习路径 类型 语法 工程 # VS Code 插件 TypeScript Importer : 类型补全 自动导入 Move TS 编辑文件路径,直接修改目录结构 Error...Lens 错误提示 # 快速练习 Playground (opens new window) # TS 文件快速执行 ts-node 安装 npm i ts-node typescript -...在项目中创建项目配置文件 tsconfig.json npx --package typescript tsc --init # 如果已经全局安装 TypeScript tsc --init 创建 TS...文件 index.ts console.log('Hello TypeScript') 执行 ts-node index.ts 配置参数 -P, --project 指定 tsconfig...执行并且生成 JS 文件,输出到 .ts-node 文件夹下(需要与 --compilerHost 一起使用) # 原型类型和对象类型 # 原始类型标注 const name: string = 'Cell
使用最广泛的一种类型编程思路:将复杂的工具类型,拆解为由基础工具类型、类型工具的组合。...MarkPropsAsOptional< { foo: string, bar: number, baz: boolean, }, 'bar' >; 辅助工具 Flatten,用于将交叉类型结构展平为单层的对象结构...从一维原始类型集合,扩展二维的对象类型,在对象类型之间进行交叉并补集运算,以及对同名属性的各种情况处理。...// 此时是一个无法改变的模板字符串类型,但所有 `Hello ` 开头的字面量类型都会是其子类型 模板字符串类型的主要目的是增强字符串字面量类型的灵活性,进一步增强类型和逻辑代码的关联。...由于模板字符串类型最终产物还是字符串字面量类型,因此只要插槽位置的类型匹配,字符串字面量类型就可以被认为是模板字符串类型的子类型: declare let v1: `${number}.
交集类型 type Bar = { x: number }; type Baz = { y: number }; type Foo = Bar & Baz; 结果 Foo 类型: { x: number...; y: number } 解释: Foo 是 Bar 和 Baz 的交集类型。...} 解释: Bar 是一个联合类型,这意味着它可以是 Foo 或 Baz。...`Foo` 或 `Baz` 之一 总的来说 交集类型(&):要求所有类型的属性都存在。...联合类型(|):允许类型是其中之一。
# 联合类型与交叉类型 交叉类型,符号 &,即按位与运算符。...而代表按位与的 & ,则需要符合所有类型,才可以说实现了这个交叉类型,即 A & B 需要同时满足 A 与 B 两个类型。...类型的交叉类型,其内部同名属性类型同样会按照交叉类型进行合并: type Struct1 = { primitiveProp: string; objectProp: { name:...,联合类型只需要符合成员之一即可,交叉类型需要严格符合每一位成员。...,满足其中一个类型即满足这个联合类型(|) 类型别名、工具类型 交叉类型 创建一组类型集合,满足其中所有类型才满足映射联合类型(&) 类型别名、工具类型 索引签名类型 声明一个拥有任意属性,键值类型一致的接口结构
参考资料:https://ts.xcatliu.com/basics/type-assertion.html 最近在研究TypeScript,现在很多模块都是用这个写的,不懂也不方便看源码呐,所以随手做下笔记...---- 类型断言用于手动指定一个值的类型。...三、类型断言的限制 综上所述,类型断言有以下特点: 联合类型可以被断言为其中一个类型 父类可以被断言为子类 任何类型都可以被断言为any any可以被断言为任何类型 但类型之间的断言却是有限制的。...Cat = { name:"tom", run(){ console.log("running"); } } const animal:Animal = tom; TS...五、类型断言 VS 类型转换 类型断言只会影响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类型。
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本身。
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的。
前言--本文主要讲解TypeScript的基本数据结构,主要包括JS基本数据类型以及TS特有的数据类型。...node 不能直接执行ts文件,需要先将ts编译成js,然后再执行js一、 string、number、null、undefined、boolean类型声明JS普通写法如下: let myName =..."zhangsan"; let count = 1; let a = null; let b = undefined; let visiable = false;TS写法如下: 不能更改它们的变量类型,...Error:Type 'true' is not assignable to type 'String'.二、 array、tuple(元祖)JS写法如下: let arr = ['语文','数学']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...,字符串类型的枚举成员不能反向映射。
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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
领取专属 10元无门槛券
手把手带您无忧上云