Ts的一些内置工具类

69 阅读1分钟
Partial<T>

Partial的作用是所有一个类型的所有参数变成可选

interface student ={
age:number,
name:string
}

type sutdentTransfer=Partial<student>

 type sutdentTransfer={
age?:number|undefined,
name?:string|undefined
}

实现源码

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

Required<T> 工具类型 用于把所有属性变成必填

 type PartialStudent=Required<Partial<student>>
 
//实现源码 通过 ‘-?’ 移除可选操作使得属性从可选变为必选的
type Required<T> = {
  [P in keyof T]-?: T[P];
};
??和||的区别?
??判断左侧返回值为undefine /null ,||判断左侧逻辑返回true


Exclude<T,u> (排除)

从类型T中提取除 u外可分配给U的类型

eg:
interface User {  
name: string;  
sex: string;  
age: number; 
} 
type NewType = Exclude<keyof User, 'name' | 'sex'>; 
re: 
type NewType = "age"

Extract<T, U> (提取)

从类型T,提取可分配给U的类型

eg:
interface User {  
name: string;  
sex: string;  
age: number; 
} 
type NewType = Extract<keyof User, 'name' | 'sex'>; 
re: 
type NewType = "name"|'sex'

Omit<T, K> 和Pick<T,k>

Omit构造一个类型,从t中提取 除K包含的属性外的所有属性
eg:
interface User {  
name: string;  
sex: string;  
age: number; 
} 
type NewType = Omit<User, 'name' | 'sex'>; 
re: 
type NewType = {
age:number
}
Pick<T,k>构造一个类型,从t中提取 包含k在内的所有属性
eg:
interface User {  
name: string;  
sex: string;  
age: number; 
} 
type NewType = Pick<User, 'name' | 'sex'>; 
re: 
type NewType = {
name: string;  
sex: string;  
}

Record<T,K>

从K中选出类型为T的全部属性

eg:
interface User {  
name: string;  
sex: string;  
age: number; 
} 
type NewType = Record<string, User>; 
re: 
type NewType = {
name: string;  
sex: string;  
}

NonNullable 去除null,undefined

eg:
type name=string|null|undefined

let newType=NonNullable (name)
re:
newType=string

Parameters获取函数类型的参数,返回元组

eg:
interface User {
  name: string;
  sex: string;
  age: number;
  getFamily: (name: string) => User[];
}
type NewType = Parameters<User['getFamily']>;

re:
type NewType = [name: string]