trusktr-dummy-test-pkg
Version:
JavaScript/TypeScript class inheritance tools.
32 lines (31 loc) • 1.43 kB
TypeScript
import { Constructor } from './utils.js';
declare enum ImplementationMethod {
PROXIES_ON_INSTANCE_AND_PROTOTYPE = "PROXIES_ON_INSTANCE_AND_PROTOTYPE",
PROXIES_ON_PROTOTYPE = "PROXIES_ON_PROTOTYPE",
PROXY_AFTER_INSTANCE_AND_PROTOTYPE = "PROXY_AFTER_INSTANCE_AND_PROTOTYPE"
}
declare type MultipleOptions = {
method: ImplementationMethod;
};
export declare function makeMultipleHelper(options?: MultipleOptions): <T extends (new (...a: any[]) => object)[]>(...classes: T) => CombinedClasses<T>;
/**
* Mixes the given classes into a single class. This is useful for multiple
* inheritance.
*
* @example
* class Foo {}
* class Bar {}
* class Baz {}
* class MyClass extends multiple(Foo, Bar, Baz) {}
*/
export declare const multiple: <T extends (new (...a: any[]) => object)[]>(...classes: T) => CombinedClasses<T>;
declare type Shift<T extends any[]> = ((...args: T) => any) extends (_: any, ...args: infer R) => any ? R : never;
declare type MixedArray<T extends Constructor<any>[]> = _MixedArray<T, {}>;
declare type _MixedArray<T extends Constructor<any>[], U> = {
0: new () => U;
1: _MixedArray<Shift<T>, {
[K in keyof InstanceType<T[0]> | keyof U]: K extends keyof U ? U[K] : InstanceType<T[0]>[K];
}>;
}[T['length'] extends 0 ? 0 : 1];
declare type CombinedClasses<T> = T extends [] | [undefined] ? typeof Object : T extends Constructor[] ? MixedArray<T> : typeof Object;
export {};