diff --git a/tests/baselines/reference/unionTypeInference.js b/tests/baselines/reference/unionTypeInference.js index ec59f2c7593..bdaa340f6ea 100644 --- a/tests/baselines/reference/unionTypeInference.js +++ b/tests/baselines/reference/unionTypeInference.js @@ -5,20 +5,31 @@ function f(x: T, y: string|T): T { return x; } + +var a1: number; +var a1 = f(1, 2); +var a2: number; +var a2 = f(1, "hello"); +var a3: number; +var a3 = f(1, a1 || "hello"); +var a4: any; +var a4 = f(undefined, "abc"); + function g(value: [string, T]): T { return value[1]; } -var a: number; -var a = f(1, 2); -var b: number; -var b = f(1, "hello"); -var c: number; -var c = f(1, a || "hello"); -var d: any; -var d = f(undefined, "abc"); -var e: boolean; -var e = g(["string", true]); +var b1: boolean; +var b1 = g(["string", true]); + +function h(x: string|boolean|T): T { + return typeof x === "string" || typeof x === "boolean" ? undefined : x; +} + +var c1: number; +var c1 = h(5); +var c2: string; +var c2 = h("abc"); //// [unionTypeInference.js] @@ -27,16 +38,23 @@ var e = g(["string", true]); function f(x, y) { return x; } +var a1; +var a1 = f(1, 2); +var a2; +var a2 = f(1, "hello"); +var a3; +var a3 = f(1, a1 || "hello"); +var a4; +var a4 = f(undefined, "abc"); function g(value) { return value[1]; } -var a; -var a = f(1, 2); -var b; -var b = f(1, "hello"); -var c; -var c = f(1, a || "hello"); -var d; -var d = f(undefined, "abc"); -var e; -var e = g(["string", true]); +var b1; +var b1 = g(["string", true]); +function h(x) { + return typeof x === "string" || typeof x === "boolean" ? undefined : x; +} +var c1; +var c1 = h(5); +var c2; +var c2 = h("abc"); diff --git a/tests/baselines/reference/unionTypeInference.types b/tests/baselines/reference/unionTypeInference.types index dc7fed2aced..d685fc4ec6b 100644 --- a/tests/baselines/reference/unionTypeInference.types +++ b/tests/baselines/reference/unionTypeInference.types @@ -14,6 +14,42 @@ function f(x: T, y: string|T): T { return x; >x : T } + +var a1: number; +>a1 : number + +var a1 = f(1, 2); +>a1 : number +>f(1, 2) : number +>f : (x: T, y: string | T) => T + +var a2: number; +>a2 : number + +var a2 = f(1, "hello"); +>a2 : number +>f(1, "hello") : number +>f : (x: T, y: string | T) => T + +var a3: number; +>a3 : number + +var a3 = f(1, a1 || "hello"); +>a3 : number +>f(1, a1 || "hello") : number +>f : (x: T, y: string | T) => T +>a1 || "hello" : string | number +>a1 : number + +var a4: any; +>a4 : any + +var a4 = f(undefined, "abc"); +>a4 : any +>f(undefined, "abc") : any +>f : (x: T, y: string | T) => T +>undefined : undefined + function g(value: [string, T]): T { >g : (value: [string, T]) => T >T : T @@ -26,47 +62,48 @@ function g(value: [string, T]): T { >value : [string, T] } -var a: number; ->a : number +var b1: boolean; +>b1 : boolean -var a = f(1, 2); ->a : number ->f(1, 2) : number ->f : (x: T, y: string | T) => T - -var b: number; ->b : number - -var b = f(1, "hello"); ->b : number ->f(1, "hello") : number ->f : (x: T, y: string | T) => T - -var c: number; ->c : number - -var c = f(1, a || "hello"); ->c : number ->f(1, a || "hello") : number ->f : (x: T, y: string | T) => T ->a || "hello" : string | number ->a : number - -var d: any; ->d : any - -var d = f(undefined, "abc"); ->d : any ->f(undefined, "abc") : any ->f : (x: T, y: string | T) => T ->undefined : undefined - -var e: boolean; ->e : boolean - -var e = g(["string", true]); ->e : boolean +var b1 = g(["string", true]); +>b1 : boolean >g(["string", true]) : boolean >g : (value: [string, T]) => T >["string", true] : [string, boolean] +function h(x: string|boolean|T): T { +>h : (x: string | boolean | T) => T +>T : T +>x : string | boolean | T +>T : T +>T : T + + return typeof x === "string" || typeof x === "boolean" ? undefined : x; +>typeof x === "string" || typeof x === "boolean" ? undefined : x : T +>typeof x === "string" || typeof x === "boolean" : boolean +>typeof x === "string" : boolean +>typeof x : string +>x : string | boolean | T +>typeof x === "boolean" : boolean +>typeof x : string +>x : boolean | T +>undefined : undefined +>x : T +} + +var c1: number; +>c1 : number + +var c1 = h(5); +>c1 : number +>h(5) : number +>h : (x: string | boolean | T) => T + +var c2: string; +>c2 : string + +var c2 = h("abc"); +>c2 : string +>h("abc") : string +>h : (x: string | boolean | T) => T +