1、基础知识

基础类型: number string boolean array object

  1. enum: 枚举
  2. type, interface
  3. 联合类型 | (联合类型一次只能一种类型;而交叉类型每次都是多个类型的合并类型。)
  4. 交叉类型 & (联合类型一次只能一种类型;而交叉类型每次都是多个类型的合并类型。)
  5. typeof

typeof 操作符可以用来获取一个变量声明或对象的类型。

  1. function toArray(x: number): Array<number> {
  2. return [x];
  3. }
  4. type Func = typeof toArray; // -> (x: number) => number[]
  1. keyof

keyof 操作符可以用来一个对象中的所有 key 值:

  1. interface Person {
  2. name: string;
  3. age: number;
  4. }
  5. type K1 = keyof Person; // "name" | "age"
  1. in

in 用来遍历枚举类型:

  1. type Keys = "a" | "b" | "c"
  2. type Obj = {
  3. [p in Keys]: any
  4. } // -> { a: any, b: any, c: any }
  1. extends

有时候我们定义的泛型不想过于灵活或者说想继承某些类等,可以通过 extends 关键字添加泛型约束。

  1. interface ILengthwise {
  2. length: number;
  3. }
  4. function loggingIdentity<T extends ILengthwise>(arg: T): T {
  5. console.log(arg.length);
  6. return arg;
  7. }
  8. loggingIdentity(3);
  9. loggingIdentity({length: 10, value: 3});
  1. Paritial

Partial 的作用就是将某个类型里的属性全部变为可选项 ?。

  1. Reuqired

Required 的作用就是将某个类型里的属性全部变为必选项。

  1. Readonly

Readonly 的作用是将某个类型所有属性变为只读属性,也就意味着这些属性不能被重新赋值。

  1. Record

Record 的作用是将 K 中所有的属性的值转化为 T 类型。

  1. interface PageInfo {
  2. title: string;
  3. }
  4. type Page = "home" | "about" | "contact";
  5. const x: Record<Page, PageInfo> = {
  6. about: { title: "about" },
  7. contact: { title: "contact" },
  8. home: { title: "home" }
  9. };
  1. Exclude

Exclude 的作用是将某个类型中属于另一个的类型移除掉。

  1. type T0 = Exclude<"a" | "b" | "c", "a">; // "b" | "c"
  2. type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // "c"
  1. Extract

Extract 的作用是从 T 中提取出 U。

  1. type T0 = Extract<"a" | "b" | "c", "a" | "f">; // "a"
  2. type T1 = Extract<string | number | (() => void), Function>; // () => void