Typescript类型函数
1. Partial
Partial<T>
的作用就是将某个类型里的属性全部变为可选项 ?
typescript
interface User {
name: string;
age: number;
}
const partialUser: Partial<User> = {
name: 'hzy',
}
2. Readonly
Readonly<T>
的作用就是将某个类型里的属性全部变为只读选项 readonly
typescript
interface User {
name: string;
age: number;
}
const readonlyUser: Readonly<User> = {
name: 'hzy',
age: 18,
}
readonlyUser.age = 19 // Error: Cannot assign to 'age' because it is a read-only property
3. Record
Record<K, T>
这个工具会构建一个对象类型,其属性名的类型是K,属性值的类型是T。
typescript
type User = {
name: string;
age: number;
}
const recordUser: Record<'hzy', User> = {
hzy: {
name: 'hzy',
age: 18,
}
}
4. Pick
`Pick<T, K extends keyof T>: 这个工具会从类型T中挑选出一些属性,构建一个新的类型。
typescript
interface User {
name: string;
age: number;
address: string;
}
type UserName = Pick<User, 'name'> // { name: string; }
5. Exclude
Exclude<T, U>
这个工具会从类型T中排除与U可以赋值的类型。
typescript
type T = "a" | "b" | "c";
type U = "a" | "e";
type Result = Exclude<T, U>; // "b" | "c"
6. Omit
Omit<T, K>
这个工具会从类型T中剔除出K指定的属性
typescript
interface User {
name: string;
age: number;
address: string;
}
type UserWithoutAddress = Omit<User, "address">; // { name: string; age: number; }
7. Required
Required<T>
这个工具会将类型T中的所有属性变为必选项。
typescript
interface User {
name: string;
age?: number;
}
const requiredUser: Required<User> = { name: "Alice" }; // Error: Property 'age' is missing in type '{ name: string; }' but required in type 'Required<User>'.
8. NonNullable
NonNullable<T>
这个工具会从类型T中剔除掉null和undefined。
typescript
type T = string | null | undefined;
type NonNullableT = NonNullable<T>; // string
9. ReturnType
ReturnType<T>
这个工具会获取函数类型返回值的类型。
typescript
function foo() {
return { name: "Alice", age: 25 };
}
type FooReturnType = ReturnType<typeof foo>; // { name: string; age: number; }
10. Parameters
Parameters<T>
这个工具会获取函数T的参数类型组成的元组类型。
typescript
function foo(name: string, age: number) {
// ...
}
type FooParameters = Parameters<typeof foo>; // [string, number]
11. InstanceType
InstanceType<T>
这个工具会获取构造函数类型的实例类型。
typescript
class User {
constructor(public name: string, public age: number) { /* ... */ }
}
type UserInstance = InstanceType<typeof User>; // User