挑战
实现一个通用的类型 Mutable<T>,使类型 T 的全部属性可变(非只读)。
例如:
interface Todo {
readonly title: string;
readonly description: string;
readonly completed: boolean;
}
type MutableTodo = Mutable<Todo>; // { title: string; description: string; completed: boolean; }解答
要把一个类型的所有属性都变成可变的,我们可以理解成把所有属性去掉 readonly 修饰符。
type Mutable<T> = {
-readonly [K in keyof T]: T[K];
};这里使用了 - 操作符来去掉 readonly 修饰符,是一种固定的写法。
根据测试用例,我们还需要对 T 做限制,T 必须是一个对象类型。
type Mutable<T extends object> = {
-readonly [K in keyof T]: T[K];
};