映射类型会携带接口的可选和只读属性
interface User { name: string; age?: number; readonly email: string;
} interface User { name: string; age?: number; readonly email: string; } type change<T> = {[P in keyof T]: T[P]
}
type obj = change<User>
// 可以看到obj为
//type obj = {
// name: string;
// age?: number | undefined;
// readonly email: string;
// }
通过内置的Require<>可以破坏可选属性 通过-readonly可以移除只读属性