技术标签: typescript 高级类型 typescript javascript ts
/* 首先是联合类型的介绍 */
let a: string | number = '123' // 变量a的类型既可以是string,也可以是number
a = 123
Partial (意思是部分的; 不完全的),ts中就是让一个定义中的所有属性都变成可选参数
// 定义一个Person接口
interface Person {
name: string
age: number
}
// 但是我们有可能数据是请求过来的,刚开始我们需要定义一个空对象,如下。
const person1: Person = {}
/**
但是这样就加粗样式会出现报错,类型“{}”缺少类型“Person”中的以下属性: name, age。
可能我们可以更改定义方式如下,但是有的时候我们不想破坏事先的定义,或者不能破坏
interface Person {
name?: string
age?: number
}
*/
/**
那这个时候我们就可以用到typescript自带的高级类型 Partial,就相当于将上方接口所有属性变成可选的
将我们需要定义的类型当做泛型传入Partial中,那么就相当于当前的类型里面的所有属性都是可选的
*/
const person2: Partial<Person> = {} // 可以
const person3: Partial<Person> = { name: 'xiaodu' } // 可以
const person4: Partial<Person> = { height: 1.88 } // 报错 “height”不在类型“Partial<Person>”中
Partial的内部定义
type Partial<T> = {
[P in keyof T]?: T[P]
}
逐步解析
// 1. keyof T 是什么意思呢?
interface Person {
name: string
age: number
}
type PersonKeys = keyof Person // 等同于 type PersonKeys = 'name' | 'age'
const p1: PersonKeys = 'name' // 可以
const p2: PersonKeys = 'age' // 可以
const p3: PersonKeys = 'height' // 不能将类型“"height"”分配给“name | age”
keyof 就是将一个类型的属性名全部提取出来当做联合类型
p in xx 又是什么意思呢?
in的意思就是遍历,如上就是将 age和name进行遍历
[P in keyof T]? 的冒号就代表 可选 的参数
T[P] 就代表 如 Person[name]代表的是 string 类型
Pick (意思是选择)ts中可以选择一个原来的接口中一部分的属性定义
如果想要选择多个属性定义呢?
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}
pick接收两个泛型
Exclude (意思是排除) ts中可以排除 联合类型 中一部分的内容
注意Exclude是操作联合类型的,下方将讲到的Omit是操作键值对的
type Exclude<T, U> = T extends U ? never : T
传入两个泛型
Omit (意思是省略的)ts中就是将接口或者类型的键值对删除一部分
也就是上面所讲解的知识点拼凑起来的
type Omit<T, K extends string | number | symbol> = {
[P in Exclude<keyof T, K>]: T[P]
}
什么是TS中的类型推断? 以下面的例子为例,有时候我们并没有进行类型注解,TS经过推断后给我们添加的类型注解。 什么时候需要进行类型注解什么时候不需要呢? 比如下面的代码,TS能够推断的,我们可以不进行注解 比如下面的代码,TS不能够对参数进行推断的情况下,我们需要进行注解 什么是联合类型? 联合类型指的是一个变量可能具有多种类型,下面我们看一个简单的例子就明白了。 联合类型调用共有属性可以,但是...
联合类型(Union Types) 联合类型与交叉类型很有关联,但是使用上却完全不同。 偶尔你会遇到这种情况,一个代码库希望传入 number或 string类型的参数。 例如下面的函数: padLeft存在一个问题, padding参数的类型指定成了 any。 这就是说我们可以传入一个既不是 number也不是 string类型的参数,但是TypeScript却不报错。 在传统的面向对象语言里,...
所谓的联合类型就是通过管道 | 来讲变量设置成多种类型,赋值的时候根据设置的类型来进行相应的赋值 注意:只能赋值已经设置好的类型,如果赋值其他类型就会报错。 语法格式如下: Type1|Type2|Type3 实例一: 实例二: 实例三 : 联合类型数组...
原文:TypeScript基本知识点整理 零、序言 联合类型表示一个变量值可以是几种类型之一,我们可以使用 “|” 来分割每个类型; 联合类型的变量在被赋值时,会根据类型推断的规则推断出一个类型; 如果一个值是联合类型,我们只能访问联合类型的所有类型中共有的属性/方法; 一、访问联合类型的属性或者方法 当 TypeScript 不...
TypeScript联合类型展示 所谓联合类型,可以认为一个变量可能有两种或两种以上的类型。用代码举个例子,声明两个接口Waiter(服务员)接口和Teacher(技师)接口,然后在写一个judgeWho(判断是谁)的方法,里边传入一个animal(任意值),这时候可以能是Waiter,也可能是Teacher。所以我们使用了联合类型,关键符号是|(竖线)。 通过这个简单的例子,你应该知道什么是联合...
typescript联合类型:可以通过管道(|)将变量设置成多种类型,赋值时可以根据类型来复制 (说白了可以是多个类型,很好理解) 声明联合类型: 联合类型作为函数参数来使用: 联合类型的数组...
当一个值可以是多个类型时,使用联合类型。 例如,当一个属性是 string 或 number 时。 联合(| ,OR) 使用 | 表示参数是 string 或 number 类型: 我们可以在任何可以使用其他类型的情况下使用联合类型。例如,使用类型别名: interface 类似,例如: 联合类型错误 在使用联合类型以避免类型错误时,您需要知道自己的类型: 在我们的示例中,调用 toUpperCa...
联合类型 联合类型表示可以为多中类型中的一种 当我们需要一个变量同时具备多个类型时,这时候就可以使用联合类型声明 联合类型使用 | 分隔每个类型,只能赋值为声明的类型,不然就会报错例如: 访问联合类型属性和方法 当不确定一个联合类型的变量是不哪个类型时,只能访问此联合类型共有的属性和方法...
大家好,我是一碗周,一个不想被喝(内卷)的前端。如果写的文章有幸可以得到你的青睐,万分有幸~ 联合类型 所谓的联合类型就是定义一些类型,定义的变量只需要满足任意一种类型即可,联合类型使用|定义,示例代码如下: 在上面的代码中我们定义了一个value变量,该变量可以是number、boolean或者string类型。 交叉类型 介绍了联合类型,然后介绍一下与之特别相似的交叉类型。 所谓的交叉类型就是...