arayts
Version:
让 TypeScript 开发如丝般顺滑。ArayTS 提供了一套高效、优雅的算法工具集,包含常用的数据结构与算法实现,帮助开发者轻松构建可靠的应用程序。
44 lines • 1.88 kB
TypeScript
/**
* 类型工具集合
*/
export type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
export type Optional<T> = {
[P in keyof T]?: T[P];
};
export type Required<T> = {
[P in keyof T]-?: T[P];
};
export type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
export type ReturnTypeOf<T extends (...args: any) => any> = ReturnType<T>;
export type ArrayElement<T extends readonly any[]> = T extends readonly (infer U)[] ? U : never;
export type Merge<T extends object, U extends object> = Omit<T, keyof U> & U;
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
export type NonNullableProperties<T> = {
[P in keyof T]: NonNullable<T[P]>;
};
export type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
export type Exclude<T, U> = T extends U ? never : T;
export type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
export type MethodsOf<T> = {
[P in keyof T]: T[P] extends Function ? P : never;
}[keyof T];
export type KeysOf<T> = keyof T;
export type ValuesOf<T> = T[keyof T];
export type Record<K extends keyof any, T> = {
[P in K]: T;
};
export type UnionToTuple<T> = UnionToIntersection<T extends any ? () => T : never> extends () => infer R ? [...UnionToTuple<Exclude<T, R>>, R] : [];
export type PublicProperties<T> = Pick<T, keyof T>;
export type NonNullable<T> = T extends null | undefined ? never : T;
export type StringLiteral<T extends string> = T;
export type DeepUnwrapPromise<T> = T extends Promise<infer U> ? DeepUnwrapPromise<U> : T;
export type Literal<T extends string | number | boolean> = T;
export type TypedEventEmitter<T> = {
on<K extends keyof T>(event: K, listener: (data: T[K]) => void): void;
emit<K extends keyof T>(event: K, data: T[K]): void;
};
//# sourceMappingURL=typeUtils.d.ts.map