type Constructor = new (...args: any[]) => T; type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; type MixedInstance = InstanceType & UnionToIntersection>; type FlattenConstructorParams = T extends readonly [infer First, ...infer Rest] ? First extends Constructor ? Rest extends readonly Constructor[] ? [ ...ConstructorParameters, ...FlattenConstructorParams ] : ConstructorParameters : [] : []; type MixedConstructor = new (...args: [...ConstructorParameters, ...FlattenConstructorParams]) => MixedInstance; /** * Applies mixins to a base class. * * @param derivedCtor Base class constructor * @param constructors Additional constructors that get mixed into the base class * @returns A mixed constructor with the instance type of the base class and all mixin classes * @example * ``` * const SelectableMovableObject3D = applyMixins(Object3D, [DIVESelectable, DIVEMovable]); * const instance = new SelectableMovableObject3D(); * instance.onMove(); * instance.onSelect(); * ``` */ export declare function applyMixins(derivedCtor: T, constructors: K): MixedConstructor; export {};