export type Class = | (new (...args: any[]) => T) | (new (_: never) => T); export type ClassTuple = T extends [infer Head, ...infer Tail] ? [Class, ...ClassTuple] : [];