ts中常⽤的操作符// typeof 检查获取变量的声明或者获取类型
// ⽤法1 检查获取变量的声明
interface People {
name: string,
age: number,
typeof的用法}
const me: People = {name: 'xxx', age: 25}
type V = typeof me // =>People
// ⽤法2 获取类型
function numberArr(x:number):number[] {
return [x]
}
type fn = typeof numberArr // (x:number) => number[]
// keyof ⽤来获取某种类型的所有key值,返回的是这些key值的联合类型
// ⽤法1 遍历⼀个空数组,获取数组的⼀些属性或⽅法
interface Person1 {
name: string,
age: number,
}
type key = keyof People[] // "length | toString | pop | push | join | concat"
// ⽤法2 获取key值
interface Person2 {
name: string,
age: number,
}
type key1 = keyof Person2 // name | age
// ⽤法3
type key2 = keyof {
[x: string] :Person2
}  // 因为这⾥的键是索引类型,所以是 string | number
// in ⽤来遍历枚举类型
type Keys = 'a' | 'b' | 'c'
type obj = {
[p in Keys]:any
} // {a:any,b:any,c:any}
// infer 在条件类型语句中,可以⽤infer声明⼀个类型变量,并且对它进⾏使⽤,返回数组的第⼀项
// ⽤法:
type Head<T extends Array<number>> = T extends[head:infer H, ...rest: any[]] ? H:never
type HH = Head<[]> // never
type HH1 = Head<[1]> // 1
type HH2 = Head<[3, 2]> // 3
// 原理是,我们⽤infer定义⼀个类型变量为第⼀项,然后类型收窄,就获得了第⼀项。
// extends 当我们定义的泛型不想过于灵活,或者想继承某些类的时候,可以通过extends关键字添加泛型约束// ⽤法1 只想返回⼀个有length属性值
interface length {
length: number
}
function getLength<T extends length>(length: T): T {
return length
}
getLength('123')
getLength([1,2,3])
getLength({length: 50, name: '12313'})
// Partial 是将某个类型⾥⾯的属性全部变成可选,返回的是联合了keyof和in实现的
// Required 是将某个类型的属性全部变为必选,类似Partial
// Readonly 是将某个类型的所有属性变为只读属性,不能重新被赋值
/
/ Record Record<K extends keyof any,T> 的作⽤是将 K 中所有的属性的值转换为 T 类型
// Pick<T,K extends keyof T> 的作⽤是将某个类型中的⼦属性挑出来,变成包含这个类型部分属性的⼦属性// Exclude Exclude<T,U> 的作⽤是将某个类型中属于另⼀个的类型移除掉
// Omit Omit<T, K extends keyof any> 的作⽤是使⽤ T 类型中除了 K 类型的所有属性

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。