IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> TS一些不常用但是有用的用法 -> 正文阅读

[开发测试]TS一些不常用但是有用的用法

1.利用keyof将某个interface里的索引全部变为只读,不允许修改(或者全部变为可选/必有)

interface Person {
  name?: string
  age: number
  gender: number
}
// 只读
type ReadOnlyType<T> = {
  readonly [P in keyof T]: T[P]
}
// 可选
type ReadOnlyType<T> = {
  [P in keyof T]?: T[P]
}

// 必有
type ReadOnlyType<T> = {
  [P in keyof T]-?: T[P]
}


type ReadOnlyPerson = ReadOnlyType<Person>
// 只读
// type ReadOnlyPerson = {
//    readonly name?: string;
//    readonly age: number;
//    readonly gender: number;
// }

// 可选
// type ReadOnlyPerson = {
//    name?: string;
//    age?: number;
//    gender?: number;
// }


// 必有
// type ReadOnlyPerson = {
//    name: string;
//    age: number;
//    gender: number;
// }

2.利用keyof将某个interface里的索引全部转为联合类型

interface Person {
  name: string
  age: number
  gender: number
}

type ReadOnlyType = keyof Person 

// type ReadOnlyPerson = 'name' | 'age' | 'gender'

3.利用&将两个interface组成一个新的interface,这个新的interface里面必须包含前两个interface的所有索引,缺一不可 ( | 二选一,用得多就不列举了)

interface Person {
  name: string
}

interface Son {
 age: string
}

type NewInterface = Person & Son

// type NewInterface = {
//    name: string;
//    age: number;
// }

4.利用pick从一个interface中选择索引生成新的interface

// Pick的定义
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }
interface Person {
  name: string
  age: string
  c: string
}


type NewInterface = Pick<Person, 'name' | 'age'>

// type NewInterface = {
//    name: string;
//    age: string;
// }

5.利用Omit从一个interface中排除部分择索引生成新的interface

// Pick的定义
type Omit<T, K extends string | number | symbol> = { [P in Exclude<keyof T, K>]: T[P]; }
interface Person {
  name: string
  age: string
  c: string
}


type NewInterface = Omit<Person, 'name' | 'age'>

// type NewInterface = {
//    c: string;
// }

6. 利用InstanceType从一个类里面获取interface

// InstanceType的定义
type InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any
class A {
  name: string
  age: string
  c: string
  constructor(name: string, age: string, c: string) {
    this.name = name
    this.age = age
    this.c = c
  }
}

type NewInterface = InstanceType<typeof A>

// type NewInterface = {
//    name: string;
//    age: string;
//    c: string;
// }
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:22:01  更:2022-03-21 21:24:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:38:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码