交叉类型 &

将多个类型(通常是对象类型)合并为⼀个类型,最终类型将拥有多个类型的全部属性。

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

interface Employee {
    company: string;
    jobTitle: string;
}

// 定义交叉类型
type EmployedPerson = Person & Employee;

联合类型 |

最终类型可为多个类型中的一种

type gender = "男" | "女" | "未知"

遍历联合类型 in

type u = 'a'|'b'|'c';

//以下a,b两个类型相同
type a = {
  [x in u]: number;
};

type b = {
  a: number,
  b: number,
  c: number
};

获取对象指定属性的类型 [ ]

type Person={
    name:string
    age:number
};
type ageType = Person['age']; //number

获取对象所有属性的类型 keyof

获取对象类型中所有键名组成的联合类型

type TypeObj = {
  num: number,
  str: string,
};

type Keys = keyof MyObj; // 'num'|'str'

判断子类型 extends?:

  • 联合类型中, A2 为联合类型 A1 中的任何一种类型,则 A2 是 A1 的子类型
type A1= string | number;
type A2 = string;

// A的类型为 string
type A = A2 extends A1 ? string : number
  • 接口中,只要 A2 包含 A1 的全部属性,则 A2 是 A1 的子类型
interface A1 {
    name: string
}

interface A2 {
    name: string
    age: number
}

// A的类型为string
type A = A2 extends A1 ? string : number;