export type RequireOne = K extends keyof T ? PartialRequire : never; export type PartialRequire = { [P in K]-?: O[P]; } & O; export type MixinBase = new (...args: any[]) => any; export type GetProps = TBase extends new (props: infer P) => any ? P : never; export type GetInstance = TBase extends new (...args: any[]) => infer I ? I : never; export type MergeCtor = new (props: GetProps & GetProps) => GetInstance & GetInstance;