ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ts中常用的操作符

2021-12-31 18:38:11  阅读:132  来源: 互联网

标签:常用 name ts number length 操作符 类型 type 属性


// typeof 检查获取变量的声明或者获取类型
// 用法1 检查获取变量的声明
interface People {
  name: string,
  age: number,
}
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 类型的所有属性

标签:常用,name,ts,number,length,操作符,类型,type,属性
来源: https://www.cnblogs.com/demoTimes/p/15754102.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有