TS演练场地址
我的演练场地址
keyof使用集合
blog.csdn.net/lcl130/arti…
type Person = {
id: number;
name: string;
age: number;
}
type P1 = keyof Person;
type P2 = Person[keyof Person];
type MyPick<T, K extends keyof T> = { [P in K]: T[P] };
type P3 = MyPick<Person, 'id' | 'age'>;
const person: P3 = {
id: 0,
age: 12
}
person.age = 13;
console.log('person', person)
type MyReadonly<T> = { readonly [P in keyof T]: T[P]};
type P4 = MyReadonly<Person>;
const person1: P4 = {
id: 0,
name: 'readonly',
age: 12
}
person1.name = '张三';
type MyOmit<T, K> = { [P in keyof T as P extends K ? never : P]: T[P] };
type P5 = MyOmit<Person, 'id' | 'name'>;
type AppendToObject<T, U extends keyof any, V> = {
[P in keyof T | U]: P extends keyof T ? T[P] : V
}
type P6 = AppendToObject<Person, 'address', string>;
type Merge<F extends Record<string, any>, S extends Record<string, any>> = {
[P in keyof F | keyof S]: P extends keyof S ? S[P] : P extends keyof F ? F[P] : never;
}
type Skill = {
run: () => void;
}
type P7 = Merge<Person, Skill>;
type enableReactions<T> = {
[K in keyof T]: T[K] extends Record<string, any> ? Partial<T[K]> : T[K]
}
type MyProps<T> = {
[K in keyof T]: T[K]
}
type P8 = MyProps<Person>;