typescript 内置工具
1.概述
TypeScript 提供了一系列内置的工具类型,这些工具类型可用于进行类型操作和变换。以下是一些常见的 TypeScript 内置工具类型:
Partial<T>
:创建一个新类型,该类型包含了T
类型的所有属性,但这些属性都变成了可选的。Required<T>
:与Partial
相反,它创建一个新类型,该类型包含了T
类型的所有属性,并使它们都变成了必选的。Readonly<T>
:创建一个新类型,该类型包含了T
类型的所有属性,但这些属性都变成了只读,不可修改。Record<K, T>
:创建一个新类型,该类型代表一个对象,其属性名是K
类型的值,而属性值是T
类型。Pick<T, K>
:创建一个新类型,该类型包含了T
类型的一组属性,这些属性由K
类型指定。Omit<T, K>
:与Pick
相反,它创建一个新类型,该类型包含了T
类型的所有属性,除了由K
类型指定的属性。Exclude<T, U>
:创建一个新类型,该类型包含了T
类型中的所有值,但排除了U
类型中的值。Extract<T, U>
:创建一个新类型,该类型包含了T
类型中的所有值,但只包括U
类型中的值。NonNullable<T>
:创建一个新类型,该类型排除了T
类型中的null
和undefined
。ReturnType<T>
:获取函数类型T
的返回类型。Parameters<T>
:获取函数类型T
的参数类型的元组。InstanceType<T>
:获取构造函数类型T
的实例类型。
这些工具类型可以帮助你进行更复杂的类型操作,使代码更具可读性和可维护性。在需要对类型进行转换、操作或筛选时,内置工具类型是强大的辅助工具。
2.Partial(将一个类型 T 的所有属性变为可选属性)
Partial<T>
是 TypeScript 中的一个内置工具类型,用于将一个类型 T
的所有属性变为可选属性。 这在构建对象时特别有用,因为它允许你创建一个具有部分属性的对象,而不需要提供所有属性的值。
以下是 Partial
的示例:
interface Person {
name: string;
age: number;
email: string;
}
type PartialPerson = Partial<Person>;
const partialPerson: PartialPerson = { name: "Alice" };
// 可以只提供 name 属性,其他属性是可选的
const anotherPartialPerson: PartialPerson = { age: 30 };
// 也可以只提供 age 属性,其他属性是可选的
const fullPerson: PartialPerson = {
name: "Bob",
age: 25,
email: "bob@example.com",
};
// 也可以提供所有属性,但它们仍然是可选的
在上面的示例中,Partial<Person>
创建了一个新类型 PartialPerson
,该类型包含 Person
类型的所有属性,但这些属性都变成了可选属性。这允许你创建具有不完整属性集的对象,而不违反类型检查。
Partial
在实际开发中通常用于处理可选属性,例如在表单处理和对象初始化中非常有用。
T
的所有属性变为必选属性)
3.Required(用于将一个类型 Required<T>
是 TypeScript 中的一个内置工具类型,用于将一个类型 T
的所有属性变为必选属性。这可以用来确保在构建对象或处理类型时,所有属性都必须提供值。
以下是 Required
的示例:
interface Person {
name: string;
age?: number;
email?: string;
}
type RequiredPerson = Required<Person>;
const person: RequiredPerson = {
name: "Alice",
age: 30,
email: "alice@example.com",
};
// 必须提供所有属性:name、age 和 email
const partialPerson: Person = { name: "Bob" };
// 在原始的 Person 类型中,age 和 email 是可选的
const anotherPartialPerson: Partial<Person> = { name: "Charlie" };
// 也可以使用 Partial<Person> 来表示可选属性
在上面的示例中,Required<Person>
创建了一个新类型 RequiredPerson
,该类型包含 Person
类型的所有属性,但这些属性都变成了必选属性。这强制在构建 RequiredPerson
类型的对象时,必须提供所有属性。
Required
在某些情况下特别有用,例如在需要确保对象包含特定属性时,或者在需要强制要求所有属性都提供值时。
T
中的所有属性变为只读)
4.Readonly(它用于将给定类型 Readonly<T>
是 TypeScript 中的内置工具类型,它用于将给定类型 T
中的所有属性变为只读,阻止修改这些属性的值。这是一种很有用的方式,可以在确保对象不会被意外更改时使用。
以下是 Readonly
的示例:
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = Readonly<Person>;
const person: ReadonlyPerson = { name: "Alice", age: 30 };
// 这里的 person 对象的属性 name 和 age 都是只读的
person.name = "Bob"; // 错误,不能修改只读属性
const anotherPerson: Readonly<Person> = { name: "Charlie", age: 25 };
anotherPerson.age = 26; // 错误,不能修改只读属性
在上面的示例中,Readonly<Person>
创建了一个新类型 ReadonlyPerson
,该类型包含 Person
类型的所有属性,但这些属性都变成了只读。这意味着你不能在 ReadonlyPerson
对象上修改属性的值。
Readonly
在希望确保对象的属性不会被无意间更改时非常有用,它可以帮助你提高代码的可维护性和减少潜在的错误。
Record<K, T>
)
5.Record(创建具有一组特定属性的对象Record<K, T>
是 TypeScript 中的内置工具类型,用于创建一个新类型,该类型代表一个对象,其中属性的名称来自于类型 K
中的值,而属性的类型为 T
。它允许你轻松创建具有一组特定属性的对象。
以下是 Record
的示例:
type Student = {
name: string;
age: number;
};
// 创建一个记录,其中属性名来自于字符串类型 "subject",属性类型为 Student
type SchoolRecord = Record<"subject", Student>;
const mathStudent: SchoolRecord = {
subject: { name: "Alice", age: 20 },
};
const historyStudent: SchoolRecord = {
subject: { name: "Bob", age: 22 },
};
// 使用 "subject" 属性名来访问 Student 对象
console.log(mathStudent.subject.name); // 输出 "Alice"
在上面的示例中,Record<"subject", Student>
创建了一个新类型 SchoolRecord
,该类型有一个属性名为 "subject",而属性类型为 Student
。这使得你可以创建包含特定属性名和类型的对象。
Record
在需要创建包含一组特定属性的对象时非常有用,它可以帮助你确保对象的结构满足特定的要求。
6.Pick(允许你从一个类型中选择指定的属性,创建一个新的类型)
Pick
是 TypeScript 中的一个有用工具类型,它允许你从一个类型中选择指定的属性,创建一个新的类型。它的语法如下:
type NewType = Pick<SourceType, Keys>;
NewType
:新类型,包含了从SourceType
中选择的属性。SourceType
:源类型,你想要从中选择属性的类型。Keys
:一个或多个属性名,你想要从SourceType
中选择的属性名。
例如,如果你有一个包含多个属性的类型 Person
:
type Person = {
name: string;
age: number;
address: string;
};
你可以使用 Pick
来选择其中的一些属性,创建一个新的类型,比如:
type BasicInfo = Pick<Person, "name" | "age">;
现在,BasicInfo
类型只包含了 name
和 age
两个属性,而 address
被排除在外。这有助于在 TypeScript 中更精确地定义和使用类型,以确保类型安全。
7.Omit
8.Exclude
9.Extract
10.NonNullable
11.ReturnType
12.Parameters(用于获取函数类型的参数类型的元组)
Parameters
是 TypeScript 中的一个工具类型,它用于获取函数类型的参数类型的元组。这意味着,如果你有一个函数类型,你可以使用 Parameters
来获得该函数的参数类型的元组。
它的语法如下:
type Params = Parameters<FunctionType>;
Params
:一个元组类型,包含了函数类型FunctionType
的参数类型。
例如,如果你有一个函数类型如下:
type AddFunction = (x: number, y: number) => number;
你可以使用 Parameters
来获取其参数类型的元组:
type AddFunctionParams = Parameters<AddFunction>;
现在,AddFunctionParams
将被推断为元组类型 [number, number]
,这表示函数 AddFunction
接受两个 number
类型的参数。
这在一些类型安全的情况下非常有用,因为你可以使用这些参数类型来检查函数调用的正确性,以及对参数进行类型检查。