TypeScript 内置工具类型全解析:先收藏吃灰
2023-11-27 00:06:05
在 TypeScript 中,内置了丰富的工具类型,可以帮助我们更好地理解代码,避免类型错误。这些工具类型包括 Awaited、Awaitable、ReturnType、Parameter、Omit、Pick、Required、Readonly 和 Exclude 等。本文将详细解析这些工具类型的用法和意义,帮助你更好地掌握 TypeScript。一起阅读这篇文章,让我们快速成为 TypeScript 大师吧!
Awaited 和 Awaitable
Awaited 类型用于表示异步函数的返回值类型。它会递归推导出 async/await 方法返回的类型,或 Promise 兑现后(fulfilled)返回的类型。例如:
async function fetchUserData(): Promise<User> {
// ...
}
type UserData = Awaited<ReturnType<typeof fetchUserData>>;
在这种情况下,UserData 的类型将是 User。
Awaitable 类型表示可以用于 await 的值,换句话说,就是可以被 await 操作符修饰的类型。例如:
async function main() {
const data = await fetchUserData();
}
在上面的代码中,fetchUserData() 返回一个 Promise,因此它是一个 Awaitable 类型的值。
ReturnType 和 Parameter
ReturnType 类型用于获取函数的返回值类型。例如:
function add(a: number, b: number): number {
return a + b;
}
type ResultType = ReturnType<typeof add>;
在这种情况下,ResultType 的类型将是 number。
Parameter 类型用于获取函数的参数类型。例如:
function multiply(a: number, b: number): number {
return a * b;
}
type ParamsType = Parameter<typeof multiply>;
在这种情况下,ParamsType 的类型将是 [number, number]。
Omit、Pick、Required 和 Readonly
Omit 类型用于从一个类型中删除指定的属性。例如:
interface User {
name: string;
age: number;
email: string;
}
type UserWithoutAge = Omit<User, "age">;
在这种情况下,UserWithoutAge 的类型将是 { name: string; email: string; }。
Pick 类型用于从一个类型中选择指定的属性。例如:
interface User {
name: string;
age: number;
email: string;
}
type PickedUser = Pick<User, "name" | "email">;
在这种情况下,PickedUser 的类型将是 { name: string; email: string; }。
Required 类型用于将一个类型的可选属性变成必填属性。例如:
interface User {
name?: string;
age?: number;
email?: string;
}
type RequiredUser = Required<User>;
在这种情况下,RequiredUser 的类型将是 { name: string; age: number; email: string; }。
Readonly 类型用于将一个类型的属性变成只读属性。例如:
interface User {
name: string;
age: number;
email: string;
}
type ReadonlyUser = Readonly<User>;
在这种情况下,ReadonlyUser 的类型将是 { readonly name: string; readonly age: number; readonly email: string; }。
Exclude
Exclude 类型用于从一个类型中排除另一个类型。例如:
type User = {
name: string;
age: number;
email: string;
};
type NotUser = Exclude<string | number | boolean | User, User>;
在这种情况下,NotUser 的类型将是 string | number | boolean。
结论
TypeScript 中的工具类型非常丰富,可以帮助我们更好地理解代码,避免类型错误。希望本文对您有所帮助。如果您有任何问题,请随时提问。