subtypingWithObjectMembersOptionality3.ts(33,16): error TS2454: Variable 'a' is used before being assigned.


==== subtypingWithObjectMembersOptionality3.ts (1 errors) ====
    // Base property is optional and derived type has no property of that name
    
    interface Base { foo: string; }
    interface Derived extends Base { bar: string; }
    
    interface T {
        Foo?: Base;
    }
    
    interface S extends T {
        Foo2: Derived // ok
    }
    
    interface T2 {
        1?: Base;
    }
    
    interface S2 extends T2 {
        2: Derived; // ok
    }
    
    interface T3 {
        '1'?: Base;
    }
    
    interface S3 extends T3 {
        '1.0': Derived; // ok
    }
    
    // object literal case
    var a: { Foo?: Base; }
    var b: { Foo2: Derived; }
    var r = true ? a : b; // ok
                   ~
!!! error TS2454: Variable 'a' is used before being assigned.