From 623a1725c8f7ae779eb754a0d5d9f29a7e633688 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sat, 20 Jul 2019 10:02:46 -0700 Subject: [PATCH] Accept new baselines --- .../reference/unionTypeInference.errors.txt | 11 +++ .../baselines/reference/unionTypeInference.js | 15 ++++ .../reference/unionTypeInference.symbols | 83 +++++++++++++++---- .../reference/unionTypeInference.types | 26 ++++++ 4 files changed, 118 insertions(+), 17 deletions(-) diff --git a/tests/baselines/reference/unionTypeInference.errors.txt b/tests/baselines/reference/unionTypeInference.errors.txt index 2fe480d0a07..f28f32f3373 100644 --- a/tests/baselines/reference/unionTypeInference.errors.txt +++ b/tests/baselines/reference/unionTypeInference.errors.txt @@ -39,6 +39,17 @@ tests/cases/conformance/types/typeRelationships/typeInference/unionTypeInference ~~ !!! error TS2345: Argument of type '42' is not assignable to parameter of type 'never'. + export interface Foo { + then(f: (x: T) => U | Foo, g: U): Foo; + } + export interface Bar { + then(f: (x: T) => S | Bar, g: S): Bar; + } + + function qux(p1: Foo, p2: Bar) { + p1 = p2; + } + // Repros from #32434 declare function foo(x: T | Promise): void; diff --git a/tests/baselines/reference/unionTypeInference.js b/tests/baselines/reference/unionTypeInference.js index 868140e83a0..e41872eb4d4 100644 --- a/tests/baselines/reference/unionTypeInference.js +++ b/tests/baselines/reference/unionTypeInference.js @@ -31,6 +31,17 @@ const d1 = f4("abc"); const d2 = f4(s); const d3 = f4(42); // Error +export interface Foo { + then(f: (x: T) => U | Foo, g: U): Foo; +} +export interface Bar { + then(f: (x: T) => S | Bar, g: S): Bar; +} + +function qux(p1: Foo, p2: Bar) { + p1 = p2; +} + // Repros from #32434 declare function foo(x: T | Promise): void; @@ -43,6 +54,7 @@ const y = bar(1, 2); //// [unionTypeInference.js] "use strict"; +exports.__esModule = true; var a1 = f1(1, 2); // 1 | 2 var a2 = f1(1, "hello"); // 1 var a3 = f1(1, sn); // number @@ -59,5 +71,8 @@ var c5 = f3("abc"); // never var d1 = f4("abc"); var d2 = f4(s); var d3 = f4(42); // Error +function qux(p1, p2) { + p1 = p2; +} foo(x); var y = bar(1, 2); diff --git a/tests/baselines/reference/unionTypeInference.symbols b/tests/baselines/reference/unionTypeInference.symbols index 52b8809dee6..0d0bf6ae9be 100644 --- a/tests/baselines/reference/unionTypeInference.symbols +++ b/tests/baselines/reference/unionTypeInference.symbols @@ -107,34 +107,83 @@ const d3 = f4(42); // Error >d3 : Symbol(d3, Decl(unionTypeInference.ts, 30, 5)) >f4 : Symbol(f4, Decl(unionTypeInference.ts, 24, 21)) +export interface Foo { +>Foo : Symbol(Foo, Decl(unionTypeInference.ts, 30, 18)) +>T : Symbol(T, Decl(unionTypeInference.ts, 32, 21)) + + then(f: (x: T) => U | Foo, g: U): Foo; +>then : Symbol(Foo.then, Decl(unionTypeInference.ts, 32, 25)) +>U : Symbol(U, Decl(unionTypeInference.ts, 33, 9)) +>f : Symbol(f, Decl(unionTypeInference.ts, 33, 12)) +>x : Symbol(x, Decl(unionTypeInference.ts, 33, 16)) +>T : Symbol(T, Decl(unionTypeInference.ts, 32, 21)) +>U : Symbol(U, Decl(unionTypeInference.ts, 33, 9)) +>Foo : Symbol(Foo, Decl(unionTypeInference.ts, 30, 18)) +>U : Symbol(U, Decl(unionTypeInference.ts, 33, 9)) +>g : Symbol(g, Decl(unionTypeInference.ts, 33, 36)) +>U : Symbol(U, Decl(unionTypeInference.ts, 33, 9)) +>Foo : Symbol(Foo, Decl(unionTypeInference.ts, 30, 18)) +>U : Symbol(U, Decl(unionTypeInference.ts, 33, 9)) +} +export interface Bar { +>Bar : Symbol(Bar, Decl(unionTypeInference.ts, 34, 1)) +>T : Symbol(T, Decl(unionTypeInference.ts, 35, 21)) + + then(f: (x: T) => S | Bar, g: S): Bar; +>then : Symbol(Bar.then, Decl(unionTypeInference.ts, 35, 25)) +>S : Symbol(S, Decl(unionTypeInference.ts, 36, 9)) +>f : Symbol(f, Decl(unionTypeInference.ts, 36, 12)) +>x : Symbol(x, Decl(unionTypeInference.ts, 36, 16)) +>T : Symbol(T, Decl(unionTypeInference.ts, 35, 21)) +>S : Symbol(S, Decl(unionTypeInference.ts, 36, 9)) +>Bar : Symbol(Bar, Decl(unionTypeInference.ts, 34, 1)) +>S : Symbol(S, Decl(unionTypeInference.ts, 36, 9)) +>g : Symbol(g, Decl(unionTypeInference.ts, 36, 36)) +>S : Symbol(S, Decl(unionTypeInference.ts, 36, 9)) +>Bar : Symbol(Bar, Decl(unionTypeInference.ts, 34, 1)) +>S : Symbol(S, Decl(unionTypeInference.ts, 36, 9)) +} + +function qux(p1: Foo, p2: Bar) { +>qux : Symbol(qux, Decl(unionTypeInference.ts, 37, 1)) +>p1 : Symbol(p1, Decl(unionTypeInference.ts, 39, 13)) +>Foo : Symbol(Foo, Decl(unionTypeInference.ts, 30, 18)) +>p2 : Symbol(p2, Decl(unionTypeInference.ts, 39, 27)) +>Bar : Symbol(Bar, Decl(unionTypeInference.ts, 34, 1)) + + p1 = p2; +>p1 : Symbol(p1, Decl(unionTypeInference.ts, 39, 13)) +>p2 : Symbol(p2, Decl(unionTypeInference.ts, 39, 27)) +} + // Repros from #32434 declare function foo(x: T | Promise): void; ->foo : Symbol(foo, Decl(unionTypeInference.ts, 30, 18)) ->T : Symbol(T, Decl(unionTypeInference.ts, 34, 21)) ->x : Symbol(x, Decl(unionTypeInference.ts, 34, 24)) ->T : Symbol(T, Decl(unionTypeInference.ts, 34, 21)) +>foo : Symbol(foo, Decl(unionTypeInference.ts, 41, 1)) +>T : Symbol(T, Decl(unionTypeInference.ts, 45, 21)) +>x : Symbol(x, Decl(unionTypeInference.ts, 45, 24)) +>T : Symbol(T, Decl(unionTypeInference.ts, 45, 21)) >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(unionTypeInference.ts, 34, 21)) +>T : Symbol(T, Decl(unionTypeInference.ts, 45, 21)) declare let x: false | Promise; ->x : Symbol(x, Decl(unionTypeInference.ts, 35, 11)) +>x : Symbol(x, Decl(unionTypeInference.ts, 46, 11)) >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) foo(x); ->foo : Symbol(foo, Decl(unionTypeInference.ts, 30, 18)) ->x : Symbol(x, Decl(unionTypeInference.ts, 35, 11)) +>foo : Symbol(foo, Decl(unionTypeInference.ts, 41, 1)) +>x : Symbol(x, Decl(unionTypeInference.ts, 46, 11)) declare function bar(x: T, y: string | T): T; ->bar : Symbol(bar, Decl(unionTypeInference.ts, 36, 7)) ->T : Symbol(T, Decl(unionTypeInference.ts, 38, 21)) ->x : Symbol(x, Decl(unionTypeInference.ts, 38, 24)) ->T : Symbol(T, Decl(unionTypeInference.ts, 38, 21)) ->y : Symbol(y, Decl(unionTypeInference.ts, 38, 29)) ->T : Symbol(T, Decl(unionTypeInference.ts, 38, 21)) ->T : Symbol(T, Decl(unionTypeInference.ts, 38, 21)) +>bar : Symbol(bar, Decl(unionTypeInference.ts, 47, 7)) +>T : Symbol(T, Decl(unionTypeInference.ts, 49, 21)) +>x : Symbol(x, Decl(unionTypeInference.ts, 49, 24)) +>T : Symbol(T, Decl(unionTypeInference.ts, 49, 21)) +>y : Symbol(y, Decl(unionTypeInference.ts, 49, 29)) +>T : Symbol(T, Decl(unionTypeInference.ts, 49, 21)) +>T : Symbol(T, Decl(unionTypeInference.ts, 49, 21)) const y = bar(1, 2); ->y : Symbol(y, Decl(unionTypeInference.ts, 39, 5)) ->bar : Symbol(bar, Decl(unionTypeInference.ts, 36, 7)) +>y : Symbol(y, Decl(unionTypeInference.ts, 50, 5)) +>bar : Symbol(bar, Decl(unionTypeInference.ts, 47, 7)) diff --git a/tests/baselines/reference/unionTypeInference.types b/tests/baselines/reference/unionTypeInference.types index e6d47fa4bda..6675e63f8c4 100644 --- a/tests/baselines/reference/unionTypeInference.types +++ b/tests/baselines/reference/unionTypeInference.types @@ -131,6 +131,32 @@ const d3 = f4(42); // Error >f4 : (x: string & T) => T >42 : 42 +export interface Foo { + then(f: (x: T) => U | Foo, g: U): Foo; +>then : (f: (x: T) => U | Foo, g: U) => Foo +>f : (x: T) => U | Foo +>x : T +>g : U +} +export interface Bar { + then(f: (x: T) => S | Bar, g: S): Bar; +>then : (f: (x: T) => S | Bar, g: S) => Bar +>f : (x: T) => S | Bar +>x : T +>g : S +} + +function qux(p1: Foo, p2: Bar) { +>qux : (p1: Foo, p2: Bar) => void +>p1 : Foo +>p2 : Bar + + p1 = p2; +>p1 = p2 : Bar +>p1 : Foo +>p2 : Bar +} + // Repros from #32434 declare function foo(x: T | Promise): void;