类型工具
框架提供了一些内部使用到的类型工具可以直接使用。
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>>;