本文所有东西尽可在 typescript 官网文档寻找,但是深浅不一

高级类型

lib 库中的五个高级类型

以下所有例子皆以 person 为例

interface Person {
name: string;
age?: number;
}

Partial

源码:

type Partial<T> = {
[P in keyof T]?: T[P];
};

实例:

type person2 = Partial<Person>;
// person2 === {name?: string; age?: number}

Required

源码:

type Required<T> = {
[P in keyof T]-?: T[P];
};

实例:

type person3 = Required<Person>;
// person3 === {name: string; age: number}

Readonly

源码:

type Readonly<T> = {
readonly [P in keyof T]: T[P];
};

实例:

type person4 = Readonly<Person>;
// person4 === {
// readonly name: string;
// readonly age?: number;
// }

Pick

源码:

type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};

实例:

type person5 = Pick<Person, "name">;
// person5 === {name: string}

Record

源码:

type Record<K extends keyof any, T> = {
[P in K]: T;
};

实例:

type person6 = Record<'name' | 'age', string>
// person6 === {name: string; age: string}

条件类型

关于条件类型,官网上说的很详细了,我就直接拿过来

type T00 = Exclude<"a" | "b" | "c" | "d", "a" | "c" | "f">;  // "b" | "d"
type T01 = Extract<"a" | "b" | "c" | "d", "a" | "c" | "f">; // "a" | "c" type T02 = Exclude<string | number | (() => void), Function>; // string | number
type T03 = Extract<string | number | (() => void), Function>; // () => void type T04 = NonNullable<string | number | undefined>; // string | number
type T05 = NonNullable<(() => string) | string[] | null | undefined>; // (() => string) | string[] function f1(s: string) {
return { a: 1, b: s };
} class C {
x = 0;
y = 0;
} type T10 = ReturnType<() => string>; // string
type T11 = ReturnType<(s: string) => void>; // void
type T12 = ReturnType<(<T>() => T)>; // {}
type T13 = ReturnType<(<T extends U, U extends number[]>() => T)>; // number[]
type T14 = ReturnType<typeof f1>; // { a: number, b: string }
type T15 = ReturnType<any>; // any
type T16 = ReturnType<never>; // any
type T17 = ReturnType<string>; // Error
type T18 = ReturnType<Function>; // Error type T20 = InstanceType<typeof C>; // C
type T21 = InstanceType<any>; // any
type T22 = InstanceType<never>; // any
type T23 = InstanceType<string>; // Error
type T24 = InstanceType<Function>; // Error

高级类型与条件类型就这些,如果能够掌握他们,你就能在 ts 的海洋中任意遨游了

typescript进阶篇之高级类型与条件类型(Readonly, Partial, Pick, Record)的更多相关文章

  1. SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ?

    SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ? 我在SAP系统里复制某个标准的采购条件类型,创建了一个新的自定义条件类型ZC05,并将其分配采购定价过程RM0000. 结果却出现一 ...

  2. PHP 进阶篇:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 (麦子学员 第三阶段)

    以下是进阶篇的内容:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 ================================== ...

  3. TypeScript 条件类型精读与实践

    在大多数程序中,我们必须根据输入做出决策.TypeScript 也不例外,使用条件类型可以描述输入类型与输出类型之间的关系. 本文同步首发在个人博客中,欢迎订阅.交流. 用于条件判断时的 extend ...

  4. 【Spring AOP】Spring AOP之如何通过注解的方式实现各种通知类型的AOP操作进阶篇(3)

    一.切入点表达式的各种类型 切入点表达式的作用:限制连接点的匹配(满足时对应的aspect方法会被执行) 1)execution:用于匹配方法执行连接点.Spring AOP用户可能最经常使用exec ...

  5. go语言之进阶篇通过switch实现类型断言

    1.通过switch实现类型断言 示例: package main import "fmt" type Student struct { name string id int } ...

  6. go语言之进阶篇通过if实现类型断言

    1.通过if实现类型断言 示例: package main import "fmt" type Student struct { name string id int } func ...

  7. go语言之进阶篇指针类型和普通类型的方法集

    方法集 类型的方法集是指可以被该类型的值调用的所有方法的集合. 用实例实例 value 和 pointer 调用方法(含匿名字段)不受方法集约束,编译器编总是查找全部方法,并自动转换 receiver ...

  8. 第四篇 .NET高级技术之结构体及值类型引用类型

    结构体 在平时的开发中很少自己去写结构体,他是一种值类型的数据.对于结构,不像类那样存在继承,一个结构体不能从另一个结构或类继承.但是结构体从基类Object继承. 语法: //struct是定义结构 ...

  9. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

随机推荐

  1. Python接口测试之对MySQL的操作(六)

    本文章主要来说python对mysql数据库的基本操作,当然,前提是已经搭建了python环境和搭建了Mysql 数据库的环境,python操作mysql数据库提供了MySQLdb库,下载的地址为: ...

  2. HDU 2647 逆向拓扑排序

    令每一个员工都有一个自己的等级level[i] , 员工等级越高,那么工资越高,为了使发的钱尽可能少,所以每一级只增加一单位的钱 输入a b表示a等级高于b,那么我们反向添加边,令b—>a那么i ...

  3. Codeforces Round #374 (Div. 2) C DAG上dp

    C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...

  4. 创建Django项目(四)——模型

    2013-08-06 22:24:06|           1.创建模型          (1) "mysite\blog\models.py"文件中的内容: # -*- co ...

  5. JDBC的存储过程

    以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/stored-procedure.html: 正如一个Connection对象创建了Statement和 ...

  6. 我的arcgis培训照片12

    来自:http://www.cioiot.com/successview-381-1.html

  7. UIButton和UISlider

    UIButton 主要功能:按钮控件,主要用于与用户操作进行交互 经常使用属性及方法 系统内建的按钮类型 UIButtonTypeCustom UIButtonTypeSystem UIButtonT ...

  8. vi,vim的基本使用方法

    "i”插入 "/" 查找 "wq"保存退出 "q!"不保存退出

  9. [Java Sprint] Spring XML Configuration : Constructor Injection Demo

    Previous we see how to do Setter injection: https://www.cnblogs.com/Answer1215/p/9472117.html Now le ...

  10. yarn-cli 显示文件目录

    显示yarn bin文件夹的位置. yarn bin yarn bin将打印yarn将为您的软件包安装可执行文件的文件夹.一个可执行文件的例子可能是你已经为你的包定义的脚本,可以通过执行yarn ru ...