大家好。
我正在解决类型挑战,以更深入地研究 TypeScript。
今天,我想分享一下我对 Pick 的了解。
interface Todo { title: string description: string completed: boolean } type TodoPreview = MyPick<Todo, 'title' | 'completed'> const todo: TodoPreview = { title: 'Clean room', completed: false, }
实现内置的 Pick 泛型而不使用它。
通过从 T 中选取属性集 K 来构造类型。
挑战是创建您自己的 Pick 实用程序类型版本,TypeScript 将其作为标准实用程序提供。
interface Todo { title: string; description: string; completed: boolean; } type MyPick<T, U extends keyof T> = { [k in U]: T[k]; }; type TodoPreview = MyPick<Todo, "title" | "completed">; const todo: TodoPreview = { title: "Clean room", completed: false, };
让我逐行解释。
在第一行,MyPick 接收两个参数:T 和 U extends keyof T。
T:包含所有属性的基本类型。
U extends keyof T:指定输出类型中包含的属性。
关于 keyof
关于扩展
第二行,
它创建一个新类型,仅从给定参数中提取指定的属性。
关于映射类型,例如 [k in U]
如下所示,通过仅提供标题并完成 MyPick 来创建一个不包含 Todo 描述的新类型。
快乐编码☀️
以上是TypeScript 冒险与类型挑战 – Day Pick的详细内容。更多信息请关注PHP中文网其他相关文章!