interface Dictionary { [key: string]: T; } type EmptyObject = Record; type Callback = (err?: Error, res?: T) => void; type Nullable = T | null | undefined; type Resolvable = T | Promise; type UnwrappedPromise = T extends PromiseLike ? U : T; type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T;