关于typescript:其实泛型很简单

48次阅读

共计 1121 个字符,预计需要花费 3 分钟才能阅读完成。

泛型

TypeScript 泛型介绍
介绍官网说的很具体了,其实泛型就是 对类型进行 编程的货色,一点也不简单,会写代码函数的都很好了解。
想学好泛型,只须要把握两点基础知识即可:

  1. keyof 获取应用
  2. in 遍历应用
    哦,还有一个 泛型束缚,要害语法 extends

基础知识介绍

先定义一个 接口 interface 如下:

interface IUser {
    id: number;
    name: string;
    age?: number;
    info?: string;
}

接下来 介绍 keyof 的应用,先用 keyof 获取接口 IUser 的所有属性,如下:

type IUserKeys = keyof IUser;

而后 介绍 in 的应用,用来遍历属性,如下:

type IKeys = {[P in keyof IUser]: IUser[P]
}

简略吧,就像写 最简略的程序一样,好,接下来进入正题,咱们剖析一下 typescript 内置的几种罕用类型工具。

预置类型

  • Partial<T>
    就是把 一个接口的属性都变成 可选的,利用下面的 keyof 和 in 加上 可选操作符间接实现就行,如下:

    type Partial<T> = {[P in keyof T]?: T[P];
    };
  • Required<T>
    所有属性设置成 必填的,和下面同理,去掉可选操作符即可:

    type Required<T> = {[P in keyof T]-?: T[P];
    };
  • Readonly<T>
    把属性设置成 只读,同理,增加 readonly 修饰符即可:

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

    下面这三个都很简略,很好了解吧?接下来实现一些略微简单的,当然也不难

  • Pick<T, K>
    含意就是,选取接口中的 部门类型。这里有个 关键点就是 这部分 必须 在接口中存在,所以须要 加上 泛型束缚,实现就是 利用 extends 关键词,示意 K 被 (keyof T)束缚, 如下:

    type Pick<T, K extends keyof T> = {[P in K]: T[P];
    };
  • Record<K, T>
    含意就是把 属性 K 的类型设置成 T 类型,遍历 K,设置为 T 即可。

    type Record<K extends keyof any, T> = {[P in K]: T;
    };
  • Exclude<T, U>
    含意就是 从 T 中剔除不想要的 U 局部,比方 ‘a’ | ‘b’ | ‘c’,剔除 ’c’:

    type Exclude<T, U> = T extends U ? never : T;
  • Qmit<T, K>
    结构一个 T 类型接口,然而要从中排除 K 中的属性。这个须要思考一下,间接说实现思路 就是利用 Pick 筛选想要的属性,而后 想要的属性 通用 Exclude 把 K 中的来排除掉来获取。

    type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

正文完
 0