adnbn
Version:
Addon Bone - Cross-browser web extension framework with shared code base
15 lines (13 loc) • 733 B
TypeScript
type ExcludeFunction<T> = T extends Function ? never : T;
type Awaiter<T> = T | Promise<T>;
type PickNonFunctionProperties<T> = {
[K in keyof T as T[K] extends Function ? never : K]: T[K];
};
type ExcludeFunctionsFromProperties<T> = {
[K in keyof T]: ExcludeFunction<T[K]>;
};
type DeepAsyncProxy<T> = {
[K in keyof T]: T[K] extends (...args: any[]) => any ? (...args: Parameters<T[K]>) => Promise<Awaited<ReturnType<T[K]>>> : T[K] extends object ? DeepAsyncProxyObject<T[K]> : () => Promise<Awaited<T[K]>>;
};
type DeepAsyncProxyObject<T> = (() => Promise<DeepAsyncProxy<T>>) & DeepAsyncProxy<T>;
export type { Awaiter, DeepAsyncProxy, DeepAsyncProxyObject, ExcludeFunctionsFromProperties, PickNonFunctionProperties };