genericCallWithObjectTypeArgs2.ts(2,5): error TS2564: Property 'x' has no initializer and is not definitely assigned in the constructor.
genericCallWithObjectTypeArgs2.ts(5,5): error TS2564: Property 'y' has no initializer and is not definitely assigned in the constructor.
genericCallWithObjectTypeArgs2.ts(8,5): error TS2564: Property 'z' has no initializer and is not definitely assigned in the constructor.
genericCallWithObjectTypeArgs2.ts(32,13): error TS2454: Variable 'i' is used before being assigned.


==== genericCallWithObjectTypeArgs2.ts (4 errors) ====
    class Base {
        x: string;
        ~
!!! error TS2564: Property 'x' has no initializer and is not definitely assigned in the constructor.
    }
    class Derived extends Base {
        y: string;
        ~
!!! error TS2564: Property 'y' has no initializer and is not definitely assigned in the constructor.
    }
    class Derived2 extends Base {
        z: string;
        ~
!!! error TS2564: Property 'z' has no initializer and is not definitely assigned in the constructor.
    }
    
    // returns {}[]
    function f<T extends Base, U extends Base>(a: { x: T; y: U }) {
        return [a.x, a.y];
    }
    
    var r = f({ x: new Derived(), y: new Derived2() }); // {}[]
    var r2 = f({ x: new Base(), y: new Derived2() }); // {}[]
    
    
    function f2<T extends Base, U extends Base>(a: { x: T; y: U }) {
        return (x: T) => a.y;
    }
    
    var r3 = f2({ x: new Derived(), y: new Derived2() }); // Derived => Derived2
    
    interface I<T, U> {
        x: T;
        y: U;
    }
    
    var i: I<Base, Derived>;
    var r4 = f2(i); // Base => Derived
                ~
!!! error TS2454: Variable 'i' is used before being assigned.