/** * A callable type with the "new" operator * allows class and constructor. */ export interface Constructor { new (...args: any[]): T; } /** * A function type without class and constructor. */ export type Callable = (...args: any[]) => T; /** * Representing a value or promise. This type is used * to represent results of synchronous/asynchronous * resolution of values. */ export type ValueOrPromise = T | PromiseLike;