返回

TypeScript 内置的常用工具类型:提升开发效率指南

前端

TypeScript 作为一种功能强大的 JavaScript 扩展语言,提供了一系列实用工具类型,可以显著提高开发效率。本文将深入探讨这些工具类型,并通过实际示例展示其如何简化开发流程。

1. Readonly:锁定接口

Readonly<T> 用于将一个接口类型中的所有属性标记为只读。通过使用此工具类型,我们可以有效地防止在后续操作中修改接口属性的值。

interface Person {
  name: string;
  age: number;
}

const readonlyPerson: Readonly<Person> = {
  name: 'John Doe',
  age: 30,
};

// 编译时错误:只读属性不能被修改
readonlyPerson.name = 'Jane Doe';

2. Partial:使属性可选

Partial<T> 创建一个新类型,其中 T 中的所有属性都是可选的。此工具类型适用于表示可能不完整或不确定的数据。

interface Address {
  street: string;
  city: string;
  state: string;
}

const partialAddress: Partial<Address> = {
  street: '123 Main Street',
};

// 编译通过:属性可以是可选的
partialAddress.city; // undefined

3. Required:使属性必填

Partial<T> 相反,Required<T> 创建一个新类型,其中 T 中的所有属性都是必填的。此工具类型适用于强制要求某些属性的存在。

interface User {
  username: string;
  email?: string; // 可选属性
}

const requiredUser: Required<User> = {
  username: 'admin',
  email: 'admin@example.com', // 必填属性
};

4. Omit<T, K>:排除特定属性

Omit<T, K> 创建一个新类型,其中排除了指定属性 K 的所有属性。此工具类型可用于从现有类型中删除不需要的属性。

interface Employee {
  id: number;
  name: string;
  salary: number;
}

const employeeInfo: Omit<Employee, 'id'> = {
  name: 'John Doe',
  salary: 50000,
};

5. Pick<T, K>:选择特定属性

Omit<T, K> 相反,Pick<T, K> 创建一个新类型,其中只包含指定属性 K。此工具类型可用于从现有类型中提取所需属性。

interface Car {
  make: string;
  model: string;
  year: number;
  color: string;
  price: number;
}

const carDetails: Pick<Car, 'make' | 'model' | 'year'> = {
  make: 'Tesla',
  model: 'Model 3',
  year: 2023,
};

6. Exclude<T, U>:排除类型

Exclude<T, U> 创建一个新类型,其中排除了与 U 类型重叠的所有类型。此工具类型可用于从一组类型中排除不需要的类型。

type Shape = 'circle' | 'square' | 'triangle';
type NotSquare = Exclude<Shape, 'square'>; // 'circle' | 'triangle'

7. Extract<T, U>:提取类型

Exclude<T, U> 相反,Extract<T, U> 创建一个新类型,其中只包含与 U 类型重叠的所有类型。此工具类型可用于从一组类型中提取需要的类型。

type Primitive = string | number | boolean;
type StringOrNumber = Extract<Primitive, string | number>; // string | number

8. NonNullable:去除 null 和 undefined

NonNullable<T> 创建一个新类型,其中排除了 nullundefined。此工具类型适用于确保某些属性始终具有非空值。

interface User {
  name: string | null;
  email: string | undefined;
}

const nonNullableUser: NonNullable<User> = {
  name: 'John Doe',
  email: 'john.doe@example.com',
};

9. ReturnType:获取函数返回值类型

ReturnType<T> 获取指定函数或方法的返回值类型。此工具类型可用于推断函数的返回值,无需明确指定。

function sum(a: number, b: number): number {
  return a + b;
}

type SumReturnType = ReturnType<typeof sum>; // number

10. Parameters:获取函数参数类型

ReturnType<T> 相反,Parameters<T> 获取指定函数或方法的参数类型。此工具类型可用于推断函数的参数,无需明确指定。

function greet(name: string): void {
  console.log(`Hello, ${name}!`);
}

type GreetParametersType = Parameters<typeof greet>; // [string]