/** * Type for what object is instances of. Also applicable to "Constructor of T" as Types/Classes/Constructors are interchangable in TS. */ export interface Type { new(...args: any[]): T; } export type Constructor = Function & { prototype: T } /** * Generic `ClassDecorator` type */ export type GenericClassDecorator = (target: T) => void; export interface ISingleton{ initialize?(): void | Promise }