TypeScript内置工具类型
TypeScript 提供了许多内置的工具类型(Utility Types),这些工具类型可以用来简化类型操作,帮助开发者更灵活地处理类型。以下是一些常用的工具类型:
TypeScript 提供了许多内置的工具类型(Utility Types),这些工具类型可以用来简化类型操作,帮助开发者更灵活地处理类型。以下是一些常用的工具类型:
# 1. Partial<T>
-
定义:将类型
T的所有属性都变为可选的。 -
用途:常用于函数参数、配置对象或部分更新场景。
-
示例:
1
2
3
4
5type Person = {
name: string;
age: number;
};
type PartialPerson = Partial<Person>;等价于:
1
2
3
4type PartialPerson = {
name?: string;
age?: number;
}
# 2. Readonly<T>
-
定义:将类型
T的所有属性都变为只读的。 -
用途:用于防止对象的属性被修改,确保数据的不可变性。
-
示例:
1
2
3
4
5type Person = {
name: string;
age: number;
};
type ReadonlyPerson = Readonly<Person>;等价于:
1
2
3
4type ReadonlyPerson = {
readonly name: string;
readonly age: number;
}
# 3. Omit<T, K>
-
定义:从类型
T中排除掉属性K,返回一个新类型。 -
用途:用于创建一个不包含某些属性的新类型。
-
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13type Person = {
name: string;
age: number;
address: string;
};
type PersonWithoutAddress = Omit<Person, "address">;
// 等价于:
type PersonWithoutAddress = {
name: string;
age: number;
}
# 4. Pick<T, K>
-
定义:从类型
T中选择属性K,返回一个新类型。 -
用途:用于提取类型中的部分属性。
-
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14type Person = {
name: string;
age: number;
address: string;
};
type PersonNameAndAge = Pick<Person, "name" | "age">;
// 等价于:
type PersonNameAndAge = {
name: string;
age: number;
}
# 5. Exclude<T, U>
-
定义:从类型
T中排除掉类型U的部分。 -
用途:用于从联合类型中排除某些类型。
-
示例:
1
2
3
4
5
6type StringOrNumber = string | number;
type StringOnly = Exclude<StringOrNumber, number>;
// 等价于:
type StringOnly = string;
# 6. Extract<T, U>
-
定义:从类型
T中提取出类型U的部分。 -
用途:用于从联合类型中提取某些类型。
-
示例:
1
2
3
4
5
6type StringOrNumber = string | number;
type NumberOnly = Extract<StringOrNumber, number>;
// 等价于:
type NumberOnly = number;
# 7. NonNullable<T>
-
定义:从类型
T中排除null和undefined。 -
用途:用于确保类型中不包含
null和undefined。 -
示例:
1
2
3
4
5
6type NullableString = string | null | undefined;
type NonNullableString = NonNullable<NullableString>;
// 等价于:
type NonNullableString = string;
# 8. ReturnType<T>
-
定义:获取函数类型
T的返回值类型。 -
用途:用于从函数类型中提取返回值类型。
-
示例:
1
2
3
4
5
6type GetPerson = () => { name: string; age: number };
type PersonType = ReturnType<GetPerson>;
// 等价于:
type PersonType = { name: string; age: number };
# 9. Parameters<T>
-
定义:获取函数类型
T的参数类型。 -
用途:用于从函数类型中提取参数类型。
-
示例:
1
2
3
4
5
6type AddFunction = (a: number, b: number) => number;
type AddFunctionParameters = Parameters<AddFunction>;
// 等价于:
type AddFunctionParameters = [number, number];
# 10. InstanceType<T>
-
定义:获取构造函数类型
T的实例类型。 -
用途:用于从构造函数类型中提取实例类型。
-
示例:
1
2
3
4
5
6
7
8
9
10class Person {
constructor(public name: string, public age: number) {}
}
type PersonInstance = InstanceType<typeof Person>;
// 等价于:
// type PersonInstance = {
// name: string;
// age: number;
// }
# 11. Record<K, T>
-
定义:创建一个新类型,其键为
K,值为T。 -
用途:用于创建一个对象类型,其中键和值的类型是固定的。
-
示例:
1
2
3
4
5
6
7type Status = "active" | "inactive";
type StatusMap = Record<Status, number>;
// 等价于:
// type StatusMap = {
// active: number;
// inactive: number;
// }
# 12. Awaited<T>
-
定义:获取
Promise类型T的最终值类型。 -
用途:用于从
Promise类型中提取最终值类型。 -
示例:
1
2
3
4type PromiseString = Promise<string>;
type AwaitedString = Awaited<PromiseString>;
// 等价于:
// type AwaitedString = string;
# 总结
这些工具类型在 TypeScript 中非常强大,可以帮助开发者更灵活地操作类型,减少重复代码,提高代码的可维护性和可读性。根据具体的使用场景,选择合适的工具类型可以极大地提升开发效率。