什么是类型参数工具类型?
类型参数工具类型(Utility Types)是TypeScript提供的内置类型,用于在现有类型的基础上进行转换或修改。这些工具类型可以帮助开发者简化常见的类型操作,如去除属性的可选项、添加只读属性、提取对象的键等。TypeScript的工具类型非常强大,能够显著提高代码的灵活性和复用性。
常见的类型参数工具类型
以下是一些常用的类型参数工具类型:
-
Partial
- 将类型
T
中的所有属性变为可选。 - 例如:
Partial<{ a: string; b: number }> -> { a?: string; b?: number }
- 将类型
-
Required
- 将类型
T
中的所有属性变为必填。 - 例如:
Required<{ a?: string; b?: number }> -> { a: string; b: number }
- 将类型
-
Readonly
- 将类型
T
中的所有属性变为只读。 - 例如:
Readonly<{ a: string; b: number }> -> { readonly a: string; readonly b: number }
- 将类型
-
Record<K, T>
- 构造一个新类型,该类型具有键为
K
,值为T
的属性。 - 例如:
Record<'a' | 'b', boolean> -> { a: boolean; b: boolean }
- 构造一个新类型,该类型具有键为
-
Pick<T, K>
- 从类型
T
中选择键为K
的属性,构造一个新的类型。 - 例如:
Pick<{ a: string; b: number; c: boolean }, 'a' | 'c'> -> { a: string; c: boolean }
- 从类型
-
Omit<T, K>
- 从类型
T
中移除键为K
的属性,构造一个新的类型。 - 例如:
Omit<{ a: string; b: number; c: boolean }, 'b'> -> { a: string; c: boolean }
- 从类型
-
Exclude<T, U>
- 从类型
T
中排除可以赋值给U
的类型。 - 例如:
Exclude<'a' | 'b' | 'c', 'b'> -> 'a' | 'c'
- 从类型
-
Extract<T, U>
- 从类型
T
中提取可以赋值给U
的类型。 - 例如:
Extract<'a' | 'b' | 'c', 'b'> -> 'b'
- 从类型
-
NonNullable
- 从类型
T
中排除null
和undefined
。 - 例如:
NonNullable<string | null | undefined> -> string
- 从类型
-
ReturnType
- 获取函数类型
T
的返回类型。 - 例如:
ReturnType<() => string> -> string
- 获取函数类型
-
InstanceType
- 获取构造函数类型
T
的实例类型。 - 例如:
InstanceType<typeof Array> -> any[]
- 获取构造函数类型
示例
1. 使用 Partial<T>
和 Required<T>
假设有一个接口 User
,我们希望在某些情况下允许部分属性为可选,而在其他情况下要求所有属性都是必填的。
interface User {
id: number;
name: string;
email: string;
}
// 允许部分属性为可选
const partialUser: Partial<User> = {
id: 1,
name: "Alice"
};
// 要求所有属性都是必填
const requiredUser: Required<User> = {
id: 1,
name: "Alice",
email: "[email protected]"
};
2. 使用 Readonly<T>
假设我们有一个状态对象 State
,我们希望在某些情况下使其不可变。
interface State {
count: number;
message: string;
}
// 使状态对象不可变
const readonlyState: Readonly<State> = {
count: 0,
message: "Initial state"
};
// 试图修改 readonlyState 会报错
// readonlyState.count = 1; // Error: Cannot assign to 'count' because it is a read-only property.
3. 使用 Record<K, T>
假设我们有一个枚举 Role
,我们希望为每个角色创建一个权限对象。
enum Role {
Admin = "admin",
User = "user",
Guest = "guest"
}
// 创建一个权限对象
const permissions: Record<Role, boolean> = {
[Role.Admin]: true,
[Role.User]: false,
[Role.Guest]: false
};
4. 使用 Pick<T, K>
和 Omit<T, K>
假设我们有一个接口 Product
,我们希望在某些情况下只保留部分属性,而在其他情况下移除某些属性。
interface Product {
id: number;
name: string;
price: number;
description: string;
}
// 只保留 id 和 name 属性
const productSummary: Pick<Product, 'id' | 'name'> = {
id: 1,
name: "Laptop"
};
// 移除 description 属性
const productDetails: Omit<Product, 'description'> = {
id: 1,
name: "Laptop",
price: 1000
};
5. 使用 Exclude<T, U>
和 Extract<T, U>
假设我们有一个联合类型 EventTypes
,我们希望从中提取或排除某些事件类型。
type EventTypes = 'click' | 'mouseover' | 'keydown';
// 从 EventTypes 中排除 'mouseover'
type ClickOrKeydown = Exclude<EventTypes, 'mouseover'>; // 'click' | 'keydown'
// 从 EventTypes 中提取 'keydown'
type Keydown = Extract<EventTypes, 'keydown'>; // 'keydown'
总结
类型参数工具类型是TypeScript中非常强大的功能,它们可以帮助开发者轻松地进行类型转换和修改。通过合理使用这些工具类型,可以提高代码的可维护性和灵活性,减少重复代码,提高开发效率。希望上述示例能帮助你更好地理解和应用这些工具类型。
标签:typescript,string,number,参数,类型,属性,id,name From: https://blog.csdn.net/qq_24766857/article/details/143490519