UNPKG

trusktr-dummy-test-pkg

Version:

JavaScript/TypeScript class inheritance tools.

32 lines (31 loc) 1.43 kB
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 {};