// https://github.com/microsoft/TypeScript/issues/17572 export type Abstract = Function & { prototype: T } export type IConstructor = new ( ...args: A ) => T export type IClass = Abstract & IConstructor export type IConstructable = IConstructor< T, A >