// 面试题, 请写一个type 使其把Todo 类型的description变成可选的
interface Todo {
title: string;
description: string;
completed: boolean;
}
/**
*
*
* interface Todo {
title: string;
description?: string; // 这里变成可选的
completed: boolean;
}
*
*/
type ToParitalDes<T extends Todo> = Pick<T, Exclude<keyof T, "description">> & Pick<T, "description">
// 升级版本
type ToParitalDes2<T extends Todo, U extends keyof T> = Pick<T, Exclude<keyof T, U>> & Pick<T, U>;
const todo: ToParitalDes<Todo> = {
title: "Clean room",
completed: false,
description: "",
};
const todo2: ToParitalDes2<Todo, "description"> = {
title: "Clean room",
completed: false,
description :''
};
总结:
搞了一下午,差了一部分文档,比葫芦画瓢写出来了, 感觉ts是另一种语言;
Pick是从对象抽出来某些属性类型, 用先抽,然后再合的方法, 完成一个类型的可选,当然也可以拓展成多个key的扩展