Required

将类型的属性变成必选

interface Person {name?: stringage?: numberhobby?: string[]
}// 下面的类型不用定义, TypeScript自带
type Required<T> = {// -? 非常有意思, 相当于把可选的去掉[key in keyof T]-?: T[Key]
}
// Required 包裹之后 Person的所有属性变为必选了
const user1: Required<Person> = {name: "Ervin Howell",age: 26,hobby: ['code', '...']
}

Partial

Partial与Required相反, 将所有属性变为可选

interface Person {name: stringage: numberhobby: string[]
}// 下面的类型不用定义, TypeScript自带
type Partial<I> = {[k in keyof T]?: T[K]
}// Partial 包裹之后 Person的所有属性变为可选了
const user1: Partial<Person> = {name: "Ervin Howell",age: 26,
}

Exclude

Exclude<T, U> 的作用是将某个类型中属于另一个的类型移除掉, 剩余部分构成新的类型

去除UnitTypeShort类型中的 ‘D’, ‘M’
// 下面的类型不用定义, TypeScript自带
type Exclude<T, U> = T extends U? never : Ttype UnitTypeShort = 'd' | 'D' | 'M' | 'y' | 'h' | 'm' | 's' | 'ms'const foo: Exclude<UnitTypeShort, 'D' | 'M'> = 'd'
const bar1: Exclude<UnitTypeShort, 'D' | 'M'> = 'D'
// 类型“"D"”不可分配给类型“"d" | "y" | "h" | "m" | "s" | "ms"”。你的意思是“"d"”?ts(2820)
const bar2: Exclude<UnitTypeShort, 'D' | 'M'> = 'M'
// 类型“"M"”不可分配给类型“"d" | "y" | "h" | "m" | "s" | "ms"”。你的意思是“"m"”?ts(2820)

Extract

和 Exclude<T, U> 相反, Extract<T, U> 从T中提取出U, 适用于并集类型

从T中提取出U
// 下面的类型不用定义, TypeScript自带
type Extract<T, U> = T extends U ? T : never;const foo: Extract<'a' | 'b' | 'c', 'a' | 'b' | 'd'> = 'd'**加粗样式**
'a' | 'b' | 'c' extends 'a' | 'b' | 'd'? T :never
step1:('a' extends 'a' | 'b' | 'd'?'a':never) => 'a'
step2:('b' extends 'a' | 'b' | 'd'?'b':never) => 'b'
step3: ('c' extends 'a' | 'b' | 'd' ? 'c' : never) => never
res: 'a' | 'b' | never=>'a' | 'b'

泛型+extends 泛型传的是联合类型 先拆解判断再组装成联合类型

Readonly

数组或对象的所有属性值转换为只读, 这些属性不能被重新赋值

// 下面的类型不用定义, TypeScript自带
type Readonly<T> = {readonly [P in keyof T]: T[P];
}interface Person {name: stringage: numberhobby: string[]
}const user: Readonly<Person> = {name: 'Ervin Howell',age: 26,hobby: ['code', '...']
}
user.age = 25
// 无法为“age”赋值,因为它是只读属性。ts(2540)

Record

Record<K extends keyof any, T>的作用是将K中的所有属性的值转换为T类型

// 下面的类型不用定义, TypeScript自带
type Record<K extends keyof any, T> = {[P in K]: T;
};interface Person {name: stringage: numberhobby: string[]
}
const correct: Record<Pe, string> = {name: 'Ervin Howell',age: '26岁'
}const error: Record<Pe, string> = {name: 'Ervin Howell',age: 26
}// 不能将类型“number”分配给类型“string”。ts(2322)

Pick

从某个类型中挑出一些属性出来

// 下面的类型不用定义, TypeScript自带
type Pick<T, K extends keyof T> = {[P in K]: T[P];
};interface Person {name: stringage: numberhobby: string[]
}
const foo: Pick<Person, 'name' | 'age'> = {name: 'Ervin Howell',age: 26
}

Omit

从某个类型中取出出去K的其他所有属性(与Pick相反)

// 下面的类型不用定义, TypeScript自带
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;interface Person {name: stringage: numberhobby: string[]
}
// 取出 除去 'age'和'hobby'之外的属性
const foo: Omit<Person, 'age' | 'hobby'> = {name: 'Ervin Howell'
}

NonNullable

去除类型中的null和undefined

// 下面的类型不用定义, TypeScript自带
type NonNullable<T> = T & {};type p1 = NonNullable<string | null | undefined>
// type p1 = string
type p2 = NonNullable<string[] | number | undefined>
// type p2 = number | string[]
type p3 = NonNullable<string[] | number[] | { name: string } | undefined>
// type p3 = string[] | { name: string; } | number[]

ReturnType

用来得到一个函数的返回值类型

// 下面的类型不用定义, TypeScript自带
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : anytype Fun2 = (value: string) => stringtype off = ReturnType<Fun2>
// type off = string

Parameters

用于获得函数的参数类型所组成的元组类型

// 下面的类型不用定义, TypeScript自带
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;type p1 = Parameters<(a: number, b: string) => string>
// type p1 = [a: number, b: string]

TypeScript泛型工具相关推荐

  1. 【TS】1368- 秒懂 TypeScript 泛型工具类型!

    阿宝哥精心准备的<轻松学 TypeScript> 视频教程已经更新到第十九期了,合集播放量已达 14W+.通过形象生动的动画,让你轻松搞懂 TypeScript 的难点和核心知识点! 如果 ...

  2. 泛型 typescript_如何把你的头围绕Typescript泛型

    泛型 typescript by Nadeesha Cabral 通过Nadeesha Cabral 如何把你的头围绕Typescript泛型 (How to wrap your head aroun ...

  3. TypeScript 实用工具类型之 Pick 类型

    TypeScript 实用工具类型之 Pick 类型 TypeScript 实用工具类型之 Pick 类型 1. 什么是对象类型转换? 2. 什么是 TypeScript Pick? 2.1 用 Pi ...

  4. TypeScript - 泛型

    前言 本文主要记录下 TypeScript 泛型知识点,日常学习总结篇. 一.概念 泛型(Generics)是指在定义函数.接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性. ...

  5. java8:封装lambda泛型工具类之list转为map

    1   史上最简单入门:java8的lambda中的map相关操作:基础及注意事项图文详解 2   java8的lambda中collect接口案例及原理详解,官方文档解读 3   java8:封装l ...

  6. TypeScript 实用工具类型之 Partial 类型

    TypeScript 实用工具类型之 Partial 类型 TypeScript 实用工具类型之 Partial 类型 1. 场景概述 2. Partial<Type> 3. 使用 Int ...

  7. typescript (TS)进阶篇 --- 内置高阶泛型工具类型(Utility Type)

    第一部分 前置内容 关键字 keyof 索引查询 对应任何类型T,keyof T的结果为该类型上所有公有属性key的联合: interface Eg1 {name: string,readonly a ...

  8. 【前端进阶】-TypeScript高级类型 | 泛型约束、泛型接口、泛型工具类型

    前言 博主主页

  9. docwizard c++程序文档自动生成工具_如何开发一个基于 TypeScript 的工具库并自动生成文档

    为什么用 TypeScript? TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any ...

最新文章

  1. Access sql语句创建表及字段类型
  2. Sublime Text 3 快捷键精华版
  3. Java ConcurrentHashMap Example and Iterator--转
  4. 多进程与多线程(1)
  5. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十九) 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏②...
  6. tbytes 转 十六进制 string
  7. MySQL的存储函数与存储过程的区别
  8. 太实用了!这几个Python数据可视化案例!
  9. php 公交查询,php公交车线路查询系统
  10. 他是学计算机的这个句子中宾语是动词性的,《现代汉语语法修辞》 综合试卷有全部答案...
  11. 续写故事demo php,续写故事——惊喜温情
  12. Cadence 原理图操作记录
  13. android抓取日志,Android抓取所有日志
  14. mysql user导出权限_mysql快速导出user权限
  15. IDEA try catch快捷键、 快速生成get set 方法快捷键、快速生成有参和无参构造方法快捷键
  16. 信号包络及其提取方法(Matlab)
  17. 如何自己编写字符串处理函数
  18. 三连击(升级版)题解(洛谷P1618)
  19. STM32学习笔记——CH340一键下载电路
  20. 李纳斯是个怎样的人?

热门文章

  1. HDU 2014 青年歌手大奖赛_评委会打分
  2. 百度推广系列之广告词编写必杀技
  3. 真人电影中的幻想生物迷墙:索尼克为什么被骂到回炉重造?
  4. 2017年乌镇互联网大会嘉宾分享要点实录
  5. 智能养殖畜牧系统研发
  6. 化工厂人员定位系统,有效提高化工安全
  7. Tableau使用笔记
  8. matlab x和y不对应,用matlAB求x和y的对应每行的相关系数!比如x中第一行和y中第一行的相关系数!依次的到没行的一个相关系数...
  9. VI/VIM 编辑器
  10. NLPIR-ICTCLA2018分词用户大会线上抢票报名开始