首页  >  文章  >  web前端  >  TypeScript 冒险与类型挑战 – Day Pick

TypeScript 冒险与类型挑战 – Day Pick

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-10 06:26:29460浏览

大家好。
我正在解决类型挑战,以更深入地研究 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。

TypeScript Adventures with type-challenges – Day Pick

T:包含所有属性的基本类型。
U extends keyof T:指定输出类型中包含的属性。

关于 keyof
关于扩展

第二行,
它创建一个新类型,仅从给定参数中提取指定的属性。

TypeScript Adventures with type-challenges – Day Pick

关于映射类型,例如 [k in U]

如下所示,通过仅提供标题并完成 MyPick 来创建一个不包含 Todo 描述的新类型。

TypeScript Adventures with type-challenges – Day Pick

快乐编码☀️

以上是TypeScript 冒险与类型挑战 – Day Pick的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn