13 个Typescript 实用类型:开发人员的备忘单

更新日期: 2022-05-25 阅读: 1.4k 标签: 类型

在类型检查方面,Typescript非常强大,但有时当一些类型是其他类型的子集,而你需要为它们定义类型检查时,它就变得很乏味。

举个例子,你有2个响应类型。

interface UserProfileResponse {
  id: number;
  name: string;
  email: string;
  phone: string;
  avatar: string;
}

interface LoginResponse {
  id: number;
  name: string;
}

我们可以为 UserProfileResponse 定义类型,并为 LoginResponse 挑选一些属性,而不是定义相同上下文的 LoginResponse 和 UserProfileResponse 的类型。

type LoginResponse = Pick<UserProfileResponse, "id" | "name">;

让我们来了解一些可以帮助你写出更好的代码的实用函数

Uppercase

构建一个类型的所有属性都设置为大写的类型。

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

// Bad practice
type UppercaseRole = "ADMIN" | "USER" | "GUEST";

// Good practice
type UppercaseRole = Uppercase<Role>; // "ADMIN" | "USER" | "GUEST"

Lowercase

构建一个类型的所有属性都设置为小写的类型。与 Uppercase 相反。

type Role = "ADMIN" | "USER" | "GUEST";

// Bad practice
type LowercaseRole = "admin" | "user" | "guest";

// Good practice
type LowercaseRole = Lowercase<Role>; // "admin" | "user" | "guest"

Capitalize

构建一个类型的所有属性都设置为大写开头的类型。

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

// Bad practice
type CapitalizeRole = "Admin" | "User" | "Guest";

// Good practice
type CapitalizeRole = Capitalize<Role>; // "Admin" | "User" | "Guest"

Uncapitalize

构建一个类型的所有属性都设置为非大写的类型。与Capitalize相反。

type Role = "Admin" | "User" | "Guest";

// Bad practice
type UncapitalizeRole = "admin" | "user" | "guest";

// Good practice
type UncapitalizeRole = Uncapitalize<Role>; // "admin" | "user" | "guest"

Partial

构建一个类型的所有属性都设置为可选的类型。

interface User {
  name: string;
  age: number;
  password: string;
}

// Bad practice
interface PartialUser {
  name?: string;
  age?: number;
  password?: string;
}

// Good practice
type PartialUser = Partial<User>;

Required

构建一个由Type的所有属性组成的类型,设置为必填。与Partial相反。

interface User {
  name?: string;
  age?: number;
  password?: string;
}

// Bad practice
interface RequiredUser {
  name: string;
  age: number;
  password: string;
}

// Good practice
type RequiredUser = Required<User>;

Readonly

构建一个由Type的所有属性组成的类型,设置为只读。

interface User {
  role: string;
}

// Bad practice
const user: User = { role: "ADMIN" };
user.role = "USER";

// Good practice
type ReadonlyUser = Readonly<User>;
const user: ReadonlyUser = { role: "ADMIN" };
user.role = "USER"; // Error: Cannot assign to 'role' because it is a read-only property.

Record

Record是一个很好用的工具类型。他会将一个类型的所有属性值都映射到另一个类型上并创造一个新的类型,

interface Address {
  street: string;
  pin: number;
}

interface Addresses {
  home: Address;
  office: Address;
}

// 或者
type AddressesRecord = Record<"home" | "office", Address>;

Pick

从一个复合类型中,取出几个想要的类型的组合

interface User {
  name: string;
  age: number;
  password: string;
}

// Bad practice
interface UserPartial {
  name: string;
  age: number;
}

// Good practice
type UserPartial = Pick<User, "name" | "age">;

Omit

以一个类型为基础支持剔除某些属性,然后返回一个新类型。

interface User {
  name: string;
  age: number;
  password: string;
}

// Bad practice
interface UserPartial {
  name: string;
  age: number;
}

// Good practice
type UserPartial = Omit<User, "password">;

Exclude

Exclude<T, U>,该工具类型能够从类型T中剔除所有可以赋值给类型U的类型。

type Role = "ADMIN" | "USER" | "GUEST";

// Bad practice
type NonAdminRole = "USER" | "GUEST";

// Good practice
type NonAdmin = Exclude<Role, "ADMIN">; // "USER" | "GUEST"

Extract

Extract 的功能,与 Exclude 相反,它是 提取 T 中可以赋值给 U 的类型。

type Role = "ADMIN" | "USER" | "GUEST";

// Bad practice
type AdminRole = "ADMIN";

// Good practice
type Admin = Extract<Role, "ADMIN">; // "ADMIN"

NonNullable

构建一个类型的所有属性都设置为非空的类型。

type Role = "ADMIN" | "USER" | null;

// Bad practice
type NonNullableRole = "ADMIN" | "USER";

// Good practice
type NonNullableRole = NonNullable<Role>; // "ADMIN" | "USER"
作者:Rahul Sharma,译者:前端小智
来源:dev

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/11569

相关推荐

Js如何将String转化为Int

字符串到整型的一个转换,在面试过程中或者在工作中都会频繁遇到,那么string到js怎么转换呢 ?parseInt方法在format\'00\'开头的数字时会当作2进制转10进制的方法进行转换

Typescript内置类型与自定义类型

大家用过 Typescript 都清楚,很多时候我们需要提前声明一个类型,再将类型赋予变量。例如在业务中,我们需要渲染一个表格,往往需要定义:

Js实现base64,file和blob相互转换

JavaScript实现base64,file和blob相互转换:base64转为Blob;Blob转为base64;base64转换为file;js图片转换为base64;在Java中base64和File相互转换

Js的6种基本数据类型

在JS中一共有六种数据类型 String:字符串 Number:数值 Boolean:布尔值 Null:空值 Undefined:未定义 Object:对象 ,其中String,Number,Boolean,Null,Undefined属于基本数据类型而Object属于引用数据类型

JavaScript判断字符串是否为数字类型

JavaScript中有Number.isInteger可以判断一个字符串是否为整数。不过目前JS没有内置的函数来判断一个数字是否为包含小数的数字:

TypeScript never 类型

在类型理论(数学逻辑中的一种理论)中, 底部类型 是没有值的类型。也称为零或空类型,有时用 falsum(⊥)表示。 数学理论与计算机的发展是相辅相成的,底部类型在计算机科学中也有一定的应用场景。

JS数据类型转换表

下表显示了将不同的JavaScript值转换为Number,String和Boolean的结果:注意:引号(\\\"\\\")中的值表示字符串值。在红色的值是程序员可能不希望被转换为的值。

Js的typeof返回哪些数据类型?

JavaScript中的数据类型:值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。引用数据类型:对象(Object)、数组(Array)、函数(Function)。

为你的 JavaScript 项目添加智能提示和类型检查

近在做项目代码重构,其中有一个要求是为代码添加智能提示和类型检查。智能提示,英文为 IntelliSense,能为开发者提供代码智能补全、悬浮提示、跳转定义等功能,帮助其正确并且快速完成编码。

JS中的布尔 数字 字符串

JS中所有的值都可以转换成布尔类型 使用Boolean()或者 !!(两个感叹号),JS中所有的值都可以转换成数字类型,使用Number()或+。数字类型转换场景目的只有一个,用于计算,将后台传递的数据,从字符串转换为数字并参与计算

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!