export class IBuilder { protected constructor(readonly a: A) {} public build(): A { return this.a; } } export type BuilderExtract = A extends IBuilder ? B : never;