Ts中的高级使用

目录

partial

Required

Pick

Exclude (排除)

Omit 

Record



partial

作用:将传入属性变为可选项

源码:

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

用例:

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

type B = Partial<Foo>;

// 最多只能够定义 name, age 中的属性(可以不定义)
let b: B = {
  name: '1',
  age: 3,
};


Required

作用:将传入的属性变为必选项

源码:

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


Pick

作用:取出一系列k的属性

源码:

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

用例

// 相当于: type PickUser = { age: number; name: string; }

type PickUser = Pick<User, "age" | "name"> 


Exclude (排除)

作用:过滤出前者独有的属性(排除后者所有属性)

源码:

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

const str: Exclude<'a' | '1' | '2', 'a' | 'y' | 'z'> = '1';


Omit 

作用:把后者存在的属性,从前者中剔除

用例:

interface User {

id: number;

age: number;

name: string;

}

// 相当于: type OmitUser = { age: number; name: string; }

type OmitUser = Omit<User, 'id'>;


Record

作用:以 typeof 格式快速创建一个类型,此类型包含一组指定的属性且都是必填

用例:

type Coord = Record<'x' | 'y', number>;

// 等同于
type Coord = {
    x: number;
    y: number;
}