conditionalOperatorWithIdenticalBCT.ts(2,27): error TS2564: Property 'propertyX1' has no initializer and is not definitely assigned in the constructor.
conditionalOperatorWithIdenticalBCT.ts(2,47): error TS2564: Property 'propertyX2' has no initializer and is not definitely assigned in the constructor.
conditionalOperatorWithIdenticalBCT.ts(3,21): error TS2564: Property 'propertyA' has no initializer and is not definitely assigned in the constructor.
conditionalOperatorWithIdenticalBCT.ts(4,21): error TS2564: Property 'propertyB' has no initializer and is not definitely assigned in the constructor.
conditionalOperatorWithIdenticalBCT.ts(12,8): error TS2454: Variable 'x' is used before being assigned.
conditionalOperatorWithIdenticalBCT.ts(13,22): error TS2454: Variable 'x' is used before being assigned.
conditionalOperatorWithIdenticalBCT.ts(22,28): error TS2454: Variable 'x' is used before being assigned.
conditionalOperatorWithIdenticalBCT.ts(27,8): error TS2454: Variable 'a' is used before being assigned.
conditionalOperatorWithIdenticalBCT.ts(28,22): error TS2454: Variable 'a' is used before being assigned.
conditionalOperatorWithIdenticalBCT.ts(37,28): error TS2454: Variable 'x' is used before being assigned.
conditionalOperatorWithIdenticalBCT.ts(42,28): error TS2454: Variable 'a' is used before being assigned.


==== conditionalOperatorWithIdenticalBCT.ts (11 errors) ====
    //Cond ? Expr1 : Expr2,  Expr1 and Expr2 have identical best common type
    class X { propertyX: any; propertyX1: number; propertyX2: string };
                              ~~~~~~~~~~
!!! error TS2564: Property 'propertyX1' has no initializer and is not definitely assigned in the constructor.
                                                  ~~~~~~~~~~
!!! error TS2564: Property 'propertyX2' has no initializer and is not definitely assigned in the constructor.
    class A extends X { propertyA: number };
                        ~~~~~~~~~
!!! error TS2564: Property 'propertyA' has no initializer and is not definitely assigned in the constructor.
    class B extends X { propertyB: string };
                        ~~~~~~~~~
!!! error TS2564: Property 'propertyB' has no initializer and is not definitely assigned in the constructor.
    
    var x: X;
    var a: A;
    var b: B;
    
    //Cond ? Expr1 : Expr2,  Expr1 is supertype
    //Be Not contextually typed
    true ? x : a;
           ~
!!! error TS2454: Variable 'x' is used before being assigned.
    var result1 = true ? x : a;
                         ~
!!! error TS2454: Variable 'x' is used before being assigned.
    
    //Expr1 and Expr2 are literals
    true ? {} : 1;
    true ? { a: 1 } : { a: 2, b: 'string' };
    var result2 = true ? {} : 1;
    var result3 = true ? { a: 1 } : { a: 2, b: 'string' };
    
    //Contextually typed
    var resultIsX1: X = true ? x : a;
                               ~
!!! error TS2454: Variable 'x' is used before being assigned.
    var result4: (t: A) => any = true ? (m) => m.propertyX : (n) => n.propertyA;
    
    //Cond ? Expr1 : Expr2,  Expr2 is supertype
    //Be Not contextually typed
    true ? a : x;
           ~
!!! error TS2454: Variable 'a' is used before being assigned.
    var result5 = true ? a : x;
                         ~
!!! error TS2454: Variable 'a' is used before being assigned.
    
    //Expr1 and Expr2 are literals
    true ? 1 : {};
    true ? { a: 2, b: 'string' } : { a: 1 };
    var result6 = true ? 1 : {};
    var result7 = true ? { a: 2, b: 'string' } : { a: 1 };
    
    //Contextually typed
    var resultIsX2: X = true ? x : a;
                               ~
!!! error TS2454: Variable 'x' is used before being assigned.
    var result8: (t: A) => any = true ? (m) => m.propertyA : (n) => n.propertyX;
    
    //Result = Cond ? Expr1 : Expr2,  Result is supertype
    //Contextually typed
    var resultIsX3: X = true ? a : b;
                               ~
!!! error TS2454: Variable 'a' is used before being assigned.
    var result10: (t: X) => any = true ? (m) => m.propertyX1 : (n) => n.propertyX2;
    
    //Expr1 and Expr2 are literals
    var result11: any = true ? 1 : 'string';
    