内置类型
Partial
将属性变为可选。
typescript
type Partial<T> = {
[P in keyof T]?: T[P]
};
Required
将属性变为必选。通过 -
移除修饰符 ?
。默认为 +
号。
typescript
type Required<T> = {
[P in keyof T]-?: T[P]
}
Readonly
typescript
type Readonly<T> = {
readonly [P in keyof T]: T[P]
};
Writeable
同理,使用 -
移除 readonly
修饰符。
typescript
type Writeable<T> = {
-readonly [P in keyof T]: T[P]
};
Record
对象形式
typescript
type Record<K extends keyof any, T> = {
[P in K]: T
};
Exclude
排除
typescript
type Exclude<T, U> = T extends U ? never : T;
Extract
选取、取出。
typescript
type Extract<T, K> = T extends K ? T : never;
Omit
排除部分属性
typescript
type Omit<T, K extends keyof T> = Pick<T, Exclude<T, K>>
Pick
选取部分属性
typescript
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}
NonNullable
排除 null
和 undefined
typescript
type NonNullable<T> = T extends null | undefined ? never : T;
Parameters
参数类型
typescript
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
ReturnType
函数返回值类型
typescript
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
ConstructorParameters
构造函数参数类型
typescript
type ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (...args: infer P) => any ? P : never;
InstanceType
类的实例类型
typescript
type InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;
内置
typescript
// 全部大写
type Uppercase<S extends string> = intrinsic;
// 全部小写
type Lowercase<S extends string> = intrinsic;
// 首字母大写
type Capitalize<S extends string> = intrinsic;
// 首字母小写
type Uncapitalize<S extends string> = intrinsic;
Equals
类型判断
typescript
type Equals<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2) ? true : false;