Skip to content

类型工具

框架提供了一些内部使用到的类型工具可以直接使用。

TwoDimensionArrayable

转换为二维数组类型,第二维元素不一定为数组。

ts
interface User {
  name: string;
  age: number;
}

// users的类型将被推导为(User | User[])[]
const users: TwoDimensionArrayable<User> = [];
查看源码
ts
/**
 * 转换为二维数组类型,第二维元素不一定为数组
 */
export type TwoDimensionArrayable<T> = (T | T[])[];

CommonRequired

将两个类型中公共的属性设置为Required。

ts
interface User {
  id: number;
  name?: string;
  age: number;
  email?: string;
}

interface Person {
  id: number;
  name?: string;
  age?: number;
  address?: string;
}

// common的类型将被推导为:{
//  id: number;
//  name: string;
//  age: number;
//  email?: string;
// }
const common: CommonRequired<User, Person> = {
  id: 1,
  name: '张三',
  age: 20,
};
查看源码
ts
/**
 * 将两个类型中公共的属性设置为Required
 * @remarks 目标类型中定义的属性如果在源类型中也存在,则将源类型中的改属性设置为Required
 * @template T 源类型
 * @template V 目标类型
 */
export type CommonRequired<T, V> = Omit<T, Extract<keyof T, keyof V>> &
  Required<Pick<T, Extract<keyof T, keyof V>>>;

MakeRequired2.0.1

将指定属性设置为必填。

ts
interface User {
  id: number;
  name?: string;
  age?: number;
}

// user的类型将被推导为:{
//  id: number;
//  name: string;
//  age: number;
// }
const user: MakeRequired<User, 'name' | 'age'> = {
  id: 1,
  name: '张三',
  age: 20,
};
查看源码
ts
/**
 * 将指定属性设置为必填
 * @template T 源类型
 * @template K 需要改为必填的属性
 */
export type MakeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;