1 Ts 类型,用于描述变量属性 泛型,用于复用类型
partial 可选
// type PartialRes = Partial<{name: 'dong', age: 18}>;
// 1. 为何直接使用<T>
//[] 是索引类型吗//
type MyPartial<T> = {
[p in keyof T]?: T[p]
}
// Pick
// 要确保传入的K也完全属于T内部元素,
type MyPick<T,K extends keyof T> = {
[p in K] : T[p]
}
// Omit
type MyOmit<T,K extends keyof T> = {
[p in Exclude<keyof T,K>]: T[p]
}
// 不理解的是Exclude<keyof T,K> 返回到底是什么
type MyOmit2<T,K extends keyof T> = MyPick<T,Exclude<keyof T,K>>
// readonly
type MyReadOnly<T> = {
readonly [p in keyof T]?: T[p]
}
4. `keyof` 和 `in` 的协作
`keyof` 提供键的联合类型,`in` 遍历这些键生成新类型。
interface User {
id: number;
name: string;
}
// 将 User 的所有属性变为可选
type PartialUser = { [P in keyof User]?: User[P] };
// 等价于:{ id?: number; name?: string }