export type Constructor = new (...args: any[]) => T; export type NonConstructable = Omit; export type Constructable = T & (new (...args: any) => T); export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type MergeConstructorTypes = UnionToIntersection>>; type Mixin = (Base: Constructor) => Constructor; /** * Apply a list of mixins functions to a base class. Applies extensions in order * * @param Base Base class * @param extensions List of mixin functions that will extend the base class. * * @example * Compose(BaseClass, [TransportDecorated, SignatureDecorated]) */ export declare function Compose(Base: Constructor, extensions: T): Constructor> & B; export {};