conditionalOperatorConditoinIsStringType.ts(25,1): error TS2873: This kind of expression is always falsy.
conditionalOperatorConditoinIsStringType.ts(26,1): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(27,1): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(28,1): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(29,1): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(30,1): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(51,20): error TS2873: This kind of expression is always falsy.
conditionalOperatorConditoinIsStringType.ts(52,24): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(53,23): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(54,23): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(55,23): error TS2872: This kind of expression is always truthy.
conditionalOperatorConditoinIsStringType.ts(56,32): error TS2872: This kind of expression is always truthy.


==== conditionalOperatorConditoinIsStringType.ts (12 errors) ====
    //Cond ? Expr1 : Expr2,  Cond is of string type, Expr1 and Expr2 have the same type
    var condString: string;
    
    var exprAny1: any;
    var exprBoolean1: boolean;
    var exprNumber1: number;
    var exprString1: string;
    var exprIsObject1: Object;
    
    var exprAny2: any;
    var exprBoolean2: boolean;
    var exprNumber2: number;
    var exprString2: string;
    var exprIsObject2: Object;
    
    //Cond is a string type variable
    condString ? exprAny1 : exprAny2;
    condString ? exprBoolean1 : exprBoolean2;
    condString ? exprNumber1 : exprNumber2;
    condString ? exprString1 : exprString2;
    condString ? exprIsObject1 : exprIsObject2;
    condString ? exprString1 : exprBoolean1; // union
    
    //Cond is a string type literal
    "" ? exprAny1 : exprAny2;
    ~~
!!! error TS2873: This kind of expression is always falsy.
    "string" ? exprBoolean1 : exprBoolean2;
    ~~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
    'c' ? exprNumber1 : exprNumber2;
    ~~~
!!! error TS2872: This kind of expression is always truthy.
    'string' ? exprString1 : exprString2;
    ~~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
    "  " ? exprIsObject1 : exprIsObject2;
    ~~~~
!!! error TS2872: This kind of expression is always truthy.
    "hello " ? exprString1 : exprBoolean1; // union
    ~~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
    
    //Cond is a string type expression
    function foo() { return "string" };
    var array = ["1", "2", "3"];
    
    typeof condString ? exprAny1 : exprAny2;
    condString.toUpperCase ? exprBoolean1 : exprBoolean2;
    condString + "string" ? exprNumber1 : exprNumber2;
    foo() ? exprString1 : exprString2;
    array[1] ? exprIsObject1 : exprIsObject2;
    foo() ? exprString1 : exprBoolean1; // union
    
    //Results shoud be same as Expr1 and Expr2
    var resultIsAny1 = condString ? exprAny1 : exprAny2;
    var resultIsBoolean1 = condString ? exprBoolean1 : exprBoolean2;
    var resultIsNumber1 = condString ? exprNumber1 : exprNumber2;
    var resultIsString1 = condString ? exprString1 : exprString2;
    var resultIsObject1 = condString ? exprIsObject1 : exprIsObject2;
    var resultIsStringOrBoolean1 = condString ? exprString1 : exprBoolean1; // union
    
    var resultIsAny2 = "" ? exprAny1 : exprAny2;
                       ~~
!!! error TS2873: This kind of expression is always falsy.
    var resultIsBoolean2 = "string" ? exprBoolean1 : exprBoolean2;
                           ~~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
    var resultIsNumber2 = 'c' ? exprNumber1 : exprNumber2;
                          ~~~
!!! error TS2872: This kind of expression is always truthy.
    var resultIsString2 = 'string' ? exprString1 : exprString2;
                          ~~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
    var resultIsObject2 = "  " ? exprIsObject1 : exprIsObject2;
                          ~~~~
!!! error TS2872: This kind of expression is always truthy.
    var resultIsStringOrBoolean2 = "hello" ? exprString1 : exprBoolean1; // union
                                   ~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
    
    var resultIsAny3 = typeof condString ? exprAny1 : exprAny2;
    var resultIsBoolean3 = condString.toUpperCase ? exprBoolean1 : exprBoolean2;
    var resultIsNumber3 = condString + "string" ? exprNumber1 : exprNumber2;
    var resultIsString3 = foo() ? exprString1 : exprString2;
    var resultIsObject3 = array[1] ? exprIsObject1 : exprIsObject2;
    var resultIsStringOrBoolean3 = typeof condString ? exprString1 : exprBoolean1; // union
    var resultIsStringOrBoolean4 = condString.toUpperCase ? exprString1 : exprBoolean1; // union