联合类型

  1. const number = string | number;
  2. const

type类型别名

type
interface

type类型别名可以和 interface互换
interface在这种情况下没法替代 type类型别名

  1. type number = string | number
  2. const total: number = '10'

interface

  1. interface Person {
  2. name: string
  3. }

type & interface的区别

  1. interface没有办法实现 Utility Type

typeof

  • js中的 typeof,是运行时运行的,runtime
  • ts中的 typeof是静态环境下运行的

Utility Type

keyof

  1. type Person = {
  2. name: stirng,
  3. age: number
  4. }
  5. type personKeys = keyof Person

Partial

对一个类型进行编辑

  1. type Person = {
  2. name: string;
  3. age: number
  4. }
  5. const user: Partial<Person> = {}

Partial的实现

  1. type Partial<T> = {
  2. [P in keyof T]?:T[P]
  3. }

Omit

删除某个属性
如果再声明删除的属性,就会报错
Omit操作键值对

  1. const user: Omit<Person, 'name'> = {age: 2}
  2. const user: Omit<Person, 'name' | 'age'> = {}

Omit的实现

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

Exclude

过滤,返回剩下的类型
exclude操作联合类型

  1. type Person = {
  2. name: stirng,
  3. age: number
  4. }
  5. type PersonKeys = keyof Person;
  6. type Age = Exclude<PersonKeys, 'name'>

Exclude的实现

  1. type Exclude<T, U> = T extends U ? never : T;

Pick

  1. type Person = {
  2. name: stirng,
  3. age: number
  4. }
  5. type personOnlyName = Pick<Person, 'name'>

Pick的实现

  1. type Pick<T, K extends keyof T> = {
  2. [P in K]: T[P]
  3. }