type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; type TupleToUnion = T[number]; type TupleToIntersection = UnionToIntersection>; export type ClassImplements, I extends any[]> = C;