=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsNumberType.ts === //Cond ? Expr1 : Expr2, Cond is of number type, Expr1 and Expr2 have the same type var condNumber: number; >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) var exprAny1: any; >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) var exprBoolean1: boolean; >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) var exprNumber1: number; >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) var exprString1: string; >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) var exprIsObject1: Object; >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >Object : Object, Symbol(Object, Decl(lib.d.ts, 92, 1), Decl(lib.d.ts, 223, 11)) var exprAny2: any; >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) var exprBoolean2: boolean; >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) var exprNumber2: number; >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) var exprString2: string; >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) var exprIsObject2: Object; >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) >Object : Object, Symbol(Object, Decl(lib.d.ts, 92, 1), Decl(lib.d.ts, 223, 11)) //Cond is a number type variable condNumber ? exprAny1 : exprAny2; >condNumber ? exprAny1 : exprAny2 : any >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) condNumber ? exprBoolean1 : exprBoolean2; >condNumber ? exprBoolean1 : exprBoolean2 : boolean >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) condNumber ? exprNumber1 : exprNumber2; >condNumber ? exprNumber1 : exprNumber2 : number >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) condNumber ? exprString1 : exprString2; >condNumber ? exprString1 : exprString2 : string >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) condNumber ? exprIsObject1 : exprIsObject2; >condNumber ? exprIsObject1 : exprIsObject2 : Object >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) condNumber ? exprString1 : exprBoolean1; // Union >condNumber ? exprString1 : exprBoolean1 : string | boolean >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) //Cond is a number type literal 1 ? exprAny1 : exprAny2; >1 ? exprAny1 : exprAny2 : any >1 : number >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) 0 ? exprBoolean1 : exprBoolean2; >0 ? exprBoolean1 : exprBoolean2 : boolean >0 : number >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) 0.123456789 ? exprNumber1 : exprNumber2; >0.123456789 ? exprNumber1 : exprNumber2 : number >0.123456789 : number >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) - 10000000000000 ? exprString1 : exprString2; >- 10000000000000 ? exprString1 : exprString2 : string >- 10000000000000 : number >10000000000000 : number >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) 1000000000000 ? exprIsObject1 : exprIsObject2; >1000000000000 ? exprIsObject1 : exprIsObject2 : Object >1000000000000 : number >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) 10000 ? exprString1 : exprBoolean1; // Union >10000 ? exprString1 : exprBoolean1 : string | boolean >10000 : number >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) //Cond is a number type expression function foo() { return 1 }; >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >1 : number var array = [1, 2, 3]; >array : number[], Symbol(array, Decl(conditionalOperatorConditionIsNumberType.ts, 33, 3)) >[1, 2, 3] : number[] >1 : number >2 : number >3 : number 1 * 0 ? exprAny1 : exprAny2; >1 * 0 ? exprAny1 : exprAny2 : any >1 * 0 : number >1 : number >0 : number >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) 1 + 1 ? exprBoolean1 : exprBoolean2; >1 + 1 ? exprBoolean1 : exprBoolean2 : boolean >1 + 1 : number >1 : number >1 : number >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) "string".length ? exprNumber1 : exprNumber2; >"string".length ? exprNumber1 : exprNumber2 : number >"string".length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >"string" : string >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) foo() ? exprString1 : exprString2; >foo() ? exprString1 : exprString2 : string >foo() : number >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) foo() / array[1] ? exprIsObject1 : exprIsObject2; >foo() / array[1] ? exprIsObject1 : exprIsObject2 : Object >foo() / array[1] : number >foo() : number >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >array[1] : number >array : number[], Symbol(array, Decl(conditionalOperatorConditionIsNumberType.ts, 33, 3)) >1 : number >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) foo() ? exprString1 : exprBoolean1; // Union >foo() ? exprString1 : exprBoolean1 : string | boolean >foo() : number >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) //Results shoud be same as Expr1 and Expr2 var resultIsAny1 = condNumber ? exprAny1 : exprAny2; >resultIsAny1 : any, Symbol(resultIsAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 43, 3)) >condNumber ? exprAny1 : exprAny2 : any >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) var resultIsBoolean1 = condNumber ? exprBoolean1 : exprBoolean2; >resultIsBoolean1 : boolean, Symbol(resultIsBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 44, 3)) >condNumber ? exprBoolean1 : exprBoolean2 : boolean >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) var resultIsNumber1 = condNumber ? exprNumber1 : exprNumber2; >resultIsNumber1 : number, Symbol(resultIsNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 45, 3)) >condNumber ? exprNumber1 : exprNumber2 : number >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) var resultIsString1 = condNumber ? exprString1 : exprString2; >resultIsString1 : string, Symbol(resultIsString1, Decl(conditionalOperatorConditionIsNumberType.ts, 46, 3)) >condNumber ? exprString1 : exprString2 : string >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) var resultIsObject1 = condNumber ? exprIsObject1 : exprIsObject2; >resultIsObject1 : Object, Symbol(resultIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 47, 3)) >condNumber ? exprIsObject1 : exprIsObject2 : Object >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) var resultIsStringOrBoolean1 = condNumber ? exprString1 : exprBoolean1; // Union >resultIsStringOrBoolean1 : string | boolean, Symbol(resultIsStringOrBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 48, 3)) >condNumber ? exprString1 : exprBoolean1 : string | boolean >condNumber : number, Symbol(condNumber, Decl(conditionalOperatorConditionIsNumberType.ts, 1, 3)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) var resultIsAny2 = 1 ? exprAny1 : exprAny2; >resultIsAny2 : any, Symbol(resultIsAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 50, 3)) >1 ? exprAny1 : exprAny2 : any >1 : number >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) var resultIsBoolean2 = 0 ? exprBoolean1 : exprBoolean2; >resultIsBoolean2 : boolean, Symbol(resultIsBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 51, 3)) >0 ? exprBoolean1 : exprBoolean2 : boolean >0 : number >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) var resultIsNumber2 = 0.123456789 ? exprNumber1 : exprNumber2; >resultIsNumber2 : number, Symbol(resultIsNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 52, 3)) >0.123456789 ? exprNumber1 : exprNumber2 : number >0.123456789 : number >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) var resultIsString2 = - 10000000000000 ? exprString1 : exprString2; >resultIsString2 : string, Symbol(resultIsString2, Decl(conditionalOperatorConditionIsNumberType.ts, 53, 3)) >- 10000000000000 ? exprString1 : exprString2 : string >- 10000000000000 : number >10000000000000 : number >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) var resultIsObject2 = 1000000000000 ? exprIsObject1 : exprIsObject2; >resultIsObject2 : Object, Symbol(resultIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 54, 3)) >1000000000000 ? exprIsObject1 : exprIsObject2 : Object >1000000000000 : number >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) var resultIsStringOrBoolean2 = 10000 ? exprString1 : exprBoolean1; // Union >resultIsStringOrBoolean2 : string | boolean, Symbol(resultIsStringOrBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 55, 3)) >10000 ? exprString1 : exprBoolean1 : string | boolean >10000 : number >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) var resultIsAny3 = 1 * 0 ? exprAny1 : exprAny2; >resultIsAny3 : any, Symbol(resultIsAny3, Decl(conditionalOperatorConditionIsNumberType.ts, 57, 3)) >1 * 0 ? exprAny1 : exprAny2 : any >1 * 0 : number >1 : number >0 : number >exprAny1 : any, Symbol(exprAny1, Decl(conditionalOperatorConditionIsNumberType.ts, 3, 3)) >exprAny2 : any, Symbol(exprAny2, Decl(conditionalOperatorConditionIsNumberType.ts, 9, 3)) var resultIsBoolean3 = 1 + 1 ? exprBoolean1 : exprBoolean2; >resultIsBoolean3 : boolean, Symbol(resultIsBoolean3, Decl(conditionalOperatorConditionIsNumberType.ts, 58, 3)) >1 + 1 ? exprBoolean1 : exprBoolean2 : boolean >1 + 1 : number >1 : number >1 : number >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3)) >exprBoolean2 : boolean, Symbol(exprBoolean2, Decl(conditionalOperatorConditionIsNumberType.ts, 10, 3)) var resultIsNumber3 = "string".length ? exprNumber1 : exprNumber2; >resultIsNumber3 : number, Symbol(resultIsNumber3, Decl(conditionalOperatorConditionIsNumberType.ts, 59, 3)) >"string".length ? exprNumber1 : exprNumber2 : number >"string".length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >"string" : string >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >exprNumber1 : number, Symbol(exprNumber1, Decl(conditionalOperatorConditionIsNumberType.ts, 5, 3)) >exprNumber2 : number, Symbol(exprNumber2, Decl(conditionalOperatorConditionIsNumberType.ts, 11, 3)) var resultIsString3 = foo() ? exprString1 : exprString2; >resultIsString3 : string, Symbol(resultIsString3, Decl(conditionalOperatorConditionIsNumberType.ts, 60, 3)) >foo() ? exprString1 : exprString2 : string >foo() : number >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprString2 : string, Symbol(exprString2, Decl(conditionalOperatorConditionIsNumberType.ts, 12, 3)) var resultIsObject3 = foo() / array[1] ? exprIsObject1 : exprIsObject2; >resultIsObject3 : Object, Symbol(resultIsObject3, Decl(conditionalOperatorConditionIsNumberType.ts, 61, 3)) >foo() / array[1] ? exprIsObject1 : exprIsObject2 : Object >foo() / array[1] : number >foo() : number >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >array[1] : number >array : number[], Symbol(array, Decl(conditionalOperatorConditionIsNumberType.ts, 33, 3)) >1 : number >exprIsObject1 : Object, Symbol(exprIsObject1, Decl(conditionalOperatorConditionIsNumberType.ts, 7, 3)) >exprIsObject2 : Object, Symbol(exprIsObject2, Decl(conditionalOperatorConditionIsNumberType.ts, 13, 3)) var resultIsStringOrBoolean3 = foo() / array[1] ? exprString1 : exprBoolean1; // Union >resultIsStringOrBoolean3 : string | boolean, Symbol(resultIsStringOrBoolean3, Decl(conditionalOperatorConditionIsNumberType.ts, 62, 3)) >foo() / array[1] ? exprString1 : exprBoolean1 : string | boolean >foo() / array[1] : number >foo() : number >foo : () => number, Symbol(foo, Decl(conditionalOperatorConditionIsNumberType.ts, 29, 35)) >array[1] : number >array : number[], Symbol(array, Decl(conditionalOperatorConditionIsNumberType.ts, 33, 3)) >1 : number >exprString1 : string, Symbol(exprString1, Decl(conditionalOperatorConditionIsNumberType.ts, 6, 3)) >exprBoolean1 : boolean, Symbol(exprBoolean1, Decl(conditionalOperatorConditionIsNumberType.ts, 4, 3))