首页 > web前端 > js教程 > 释放 TypeScript 中实用程序类型的力量

释放 TypeScript 中实用程序类型的力量

Patricia Arquette
发布: 2024-11-11 18:44:03
原创
256 人浏览过

Unleashing the Power of Utility Types in TypeScript

嘿,TypeScript 战士! ?所以,您已经深入了解 TypeScript,也许您想知道,“为什么有这么多代码只是用于管理类型?”别担心 — 您并不孤单。我们都在这狂野的、静态类型的旅程中。

今天,我们将深入研究 TypeScript 的一些最酷的工具:实用程序类型。这些就像视频游戏中的小作弊代码一样,可以帮助您加速和简化代码。因此,让我们卷起袖子,有趣地浏览一下 TypeScript 中最有用的实用程序类型,以及它们如何让您的代码不再那么令人头疼。

什么?更多类型。

想象一下,您正在尝试使用 TypeScript 类型,而无需从头开始编写所有内容(因为谁有时间这样做?)。实用程序类型允许您通过转换或重用其他类型的部分来创建新类型。您可以将它们视为那些精美的厨房小工具,无需任何额外的努力即可进行切片和切块。它们可以节省时间,减少冗余,并使您的代码更易于管理。让我们一一分解吧!

部分

它的作用:使类型中的所有属性可选。是的,就是这么简单。

为什么你会喜欢它:非常适合当你需要一些物体但不是全部的时候。

type User = {
  id: number;
  name: string;
  email: string;
};

function updateUser(id: number, newValues: Partial<User>) {
  // Update only the properties you need, no need to bring everything.
}

updateUser(1, { name: "Ash" }); // Only updating name, thanks to Partial!

登录后复制
登录后复制

必填

它的作用:使类型中的所有属性成为必需。 TypeScript 的小意思是:“不能跳过任何字段!”

为什么你会喜欢它:有时,可选并不是一种选择。您需要锁定并加载所有内容,特别是如果某些属性之前是可选的。

type UserWithOptionalFields = {
  id: number;
  name?: string;
  email?: string;
};

const user: Required<UserWithOptionalFields> = {
  id: 1,
  name: "John",
  email: "john@example.com",
}; // All properties are now required!
登录后复制
登录后复制

记录

它的作用:使用键 Keys 和值 Type 创建一个对象类型。将其视为 TypeScript 的“创建您自己的字典”功能。

为什么你会喜欢它t:当您想要一种快速简单的方法来绘制数据时,这种类型是您最好的朋友,特别是如果您提前知道密钥的话。

type Role = "admin" | "user" | "guest";

const rolePermissions: Record<Role, string[]> = {
  admin: ["read", "write", "delete"],
  user: ["read", "write"],
  guest: ["read"],
};
登录后复制
登录后复制

选择

它的作用:采用现有类型并仅选择您指定的属性。将其视为 TypeScript 的表达方式:“让我们保持简短而温馨。”

为什么你会喜欢它:非常适合创建现有类型的子集,而无需拖拽所有内容,因为它是我的最爱之一。

type User = {
  id: number;
  name: string;
  email: string;
  age: number;
};

type UserPreview = Pick<User, "id" | "name">;
登录后复制

省略

它的作用:与Pick相反。它允许您从类型中排除特定属性。

为什么你会喜欢它:当你有一种类型时很好,但只有一个讨厌的字段你不想要。

type User = {
  id: number;
  name: string;
  email: string;
};

function updateUser(id: number, newValues: Partial<User>) {
  // Update only the properties you need, no need to bring everything.
}

updateUser(1, { name: "Ash" }); // Only updating name, thanks to Partial!

登录后复制
登录后复制

排除

它的作用:从联合中删除某些类型。这是 TypeScript 的“踢出群聊”。

为什么你会喜欢它:当你有一个大工会但只需要处理一些案件时,它非常有用。

type UserWithOptionalFields = {
  id: number;
  name?: string;
  email?: string;
};

const user: Required<UserWithOptionalFields> = {
  id: 1,
  name: "John",
  email: "john@example.com",
}; // All properties are now required!
登录后复制
登录后复制

提取

它的作用:Extract 的孪生兄弟,Extract 只保留与给定联合匹配的类型。

为什么你会喜欢它:这种类型将联合类型缩小为仅相关的部分。

type Role = "admin" | "user" | "guest";

const rolePermissions: Record<Role, string[]> = {
  admin: ["read", "write", "delete"],
  user: ["read", "write"],
  guest: ["read"],
};
登录后复制
登录后复制

就是这样! ?虽然 Extract 和 Pick 听起来很相似,但它们独特地适合不同的工作:Extract 是联合类型的过滤器,而 Picklets 是您从对象类型中挑选属性的过滤器。其对应项“排除”和“省略”也是如此。

这些实用程序类型虽小但功能强大!它们可以节省时间、减少代码冗余并保持整洁。所以下次当你与类型较量时,请记住这些帮助者。他们将简化您的 TypeScript 之旅并使其变得更加有趣。祝您编码愉快,愿您的类型始终正是您所需要的! ?

以上是释放 TypeScript 中实用程序类型的力量的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板