1、展平类型
// 这是一个映射类型的定义,它会遍历类型 T 所有属性的键(即 keyof T)
// T[KeyType]获取该键名对应的类型
/**
* 总的来说,Simplify<T> 的效果相当于直接复制了类型 T 的结构,因为它简单地映射了 T 的每个属性到相* 同的属性名和类型上。不过,这种类型别名在某些特定情况下可能会有用,比如在处理复杂的类型组合或者想要* 强制 TypeScript 将一个类型视为新的类型而不是原始类型的别名时
* 例如,如果你有一个类型 T,它可能是一个联合或交叉类型,使用 Simplify<T> 可以“展平”这个类型,让 * TypeScript 将其视为一个单一的、独立的类型,这在处理类型兼容性问题时可能会有帮助
*/
type Simplify<T> = { [KeyType in keyof T]: T[KeyType] }
2、将指定属性设置为必须
/**
* Required是另一个TypeScript工具类型,它将Pick<T, K>返回的类型中所有属性设置为必需的,即去掉它* 们的可选标记(?)
* SetRequired<T, K extends keyof T>类型别名的作用就是创建一个新的类型,该类型与原始类型T基本* * 相同,但是其中K指定的属性集都被设置为必需的,不再是可选的
**/
type SetRequired<T, K extends keyof T> = Simplify<Omit<T, K> & Required<Pick<T, K>>>;