TypeScript 内置的常用工具类型:提升开发效率指南
2023-09-25 09:39:44
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
NonNullable<T>
创建一个新类型,其中排除了 null
和 undefined
。此工具类型适用于确保某些属性始终具有非空值。
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]