TypeScript中关键字介绍
Contents
最近学习TS类型体操,其中用到了例如 keyof infer等的关键字,但在日常项目中又不太常用,故有此记录,方便查阅
extends
用于类型的继承
interface Animal {
name:string
color:string
gender:'male' | 'female'
}
interface Duck extends Animal{
sound:string
}
const duck:Duck={
name:'tang',
color:'yellow',
gender:'male',
sound:'gaga'
}
上述代码中Duck继承了父类型,并且又声明了自己独有的类型
用于类型的推断
type Test1 = 'a' | 'b' | 'c'
type Test2 = 'a' | 's'
type MyExclude<T, U> = T extends U ? never : T;
type TestType = MyExclude<Test1, Test2>
const t: TestType = 'b'
当extends两边是联合类型时,就会遵守分配律的规则拆分左侧联合类型,依次来判断拆分后的类型是否满足继承关系,再通过判断继续联合
以上述代码为例
'a' extends 'a' | 's' true never
'b' extends 'a' | 's' false 'b'
'c' extends 'a' | 's' false 'c'
最终TestType的类型是'b' | 'c'
keyof
keyof用来获取对象类型的所有键的联合类型
interface Test {
name: string
color: string
}
type TestType = keyof Test // "name"|"color"
const t1: TestType = "name"
const t2: TestType = "color"
// const t3: TestType = "gender" // 不能将类型“"gender"”分配给类型“keyof Test”。
infer
infer是typescript中的高级类型关键字,通常与条件类型一起使用,用于从已知类型中推断出其他类型,允许在类型级别执行复杂的条件分支和推断操作
type First<T extends any[]> = T extends [infer U, ...any[]] ? U : never;
type FirstType=First<[3, 2, 1]>
const n:FirstType = 3
上述代码中infer的作用是推断出第一个数组的第一个元素的类型
readonly
在typescript中,readonly用于定义对象属性或数组元素为只读(不可修改)的类型
interface Persion {
readonly IDCard: string
readonly name: string
age: number
}
const person: Persion = {
IDCard: '136548862113647524',
name: "zhang",
age: 19
}
person.name = 'wang'; // 无法为“name”赋值,因为它是只读属性
Exclude
Exclude 是 TypeScript 中内置的一个类型修饰器,用于从一个类型中排除另一个类型。
interface Test1 {
name: string
color: string
}
interface Test2 {
name: string
}
type TestType = Exclude<keyof Test1, keyof Test2>
const t1: TestType = "name" // 不能将类型“"name"”分配给类型“"color"”。
目前先记录到这里,该篇文章会继续更新…