interface Foo { propA: boolean; propB: boolean; } declare function f‹T›(x: T): T extends Foo ? string : number; function foo‹U›(x: U) { // Has type 'U extends Foo ? string : number' let a = f(x); // This assignment is allowed though! let b: string | number = a; }