=== tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts === export type ElChildren = >ElChildren : ElChildren | ElChildren.Void >ElChildren : any | ElChildren.Text; >ElChildren : any export namespace ElChildren { export type Void = undefined; >Void : undefined export type Text = string; >Text : string } type Relax = C extends ElChildren.Text ? ElChildren.Text : C; >Relax : Relax >ElChildren : any >ElChildren : any export class Elem< >Elem : Elem C extends ElChildren, > { constructor( private children_: Relax, >children_ : Relax ) { } } new Elem(undefined as ElChildren.Void); >new Elem(undefined as ElChildren.Void) : Elem >Elem : typeof Elem >undefined as ElChildren.Void : undefined >undefined : undefined >ElChildren : any new Elem('' as ElChildren.Text); >new Elem('' as ElChildren.Text) : Elem >Elem : typeof Elem >'' as ElChildren.Text : string >'' : "" >ElChildren : any new Elem('' as ElChildren.Void | ElChildren.Text); // error >new Elem('' as ElChildren.Void | ElChildren.Text) : Elem >Elem : typeof Elem >'' as ElChildren.Void | ElChildren.Text : string | undefined >'' : "" >ElChildren : any >ElChildren : any new Elem('' as ElChildren); // error >new Elem('' as ElChildren) : Elem >Elem : typeof Elem >'' as ElChildren : ElChildren >'' : "" // Repro from #31766 interface I { a: string } >a : string type DeepPartial = >DeepPartial : DeepPartial T extends object ? {[K in keyof T]?: DeepPartial} : T; declare function f(t: T, partial: DeepPartial): T; >f : (t: T, partial: DeepPartial) => T >t : T >partial : DeepPartial function g(p1: I, p2: Partial): I { >g : (p1: I, p2: Partial) => I >p1 : I >p2 : Partial return f(p1, p2); >f(p1, p2) : I >f : (t: T, partial: DeepPartial) => T >p1 : I >p2 : Partial }