From 1896248ff23aaf10a3d438752453ab7ba2046cc9 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Wed, 5 Dec 2018 15:20:31 -0800 Subject: [PATCH] Accept new baselines --- .../reference/discriminatedUnionInference.js | 27 ++++++++ .../discriminatedUnionInference.symbols | 68 +++++++++++++++++++ .../discriminatedUnionInference.types | 55 +++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 tests/baselines/reference/discriminatedUnionInference.js create mode 100644 tests/baselines/reference/discriminatedUnionInference.symbols create mode 100644 tests/baselines/reference/discriminatedUnionInference.types diff --git a/tests/baselines/reference/discriminatedUnionInference.js b/tests/baselines/reference/discriminatedUnionInference.js new file mode 100644 index 00000000000..df45edeb237 --- /dev/null +++ b/tests/baselines/reference/discriminatedUnionInference.js @@ -0,0 +1,27 @@ +//// [discriminatedUnionInference.ts] +// Repro from #28862 + +type Foo = { type: "foo", (): A[] }; +type Bar = { type: "bar", (): A }; + +type FooBar = Foo | Bar; + +type InferA = T extends FooBar ? A : never; + +type FooA = InferA>; // number + +// Repro from #28862 + +type Item = { kind: 'a', data: T } | { kind: 'b', data: T[] }; + +declare function foo(item: Item): T; + +let x1 = foo({ kind: 'a', data: 42 }); // number +let x2 = foo({ kind: 'b', data: [1, 2] }); // number + + +//// [discriminatedUnionInference.js] +"use strict"; +// Repro from #28862 +var x1 = foo({ kind: 'a', data: 42 }); // number +var x2 = foo({ kind: 'b', data: [1, 2] }); // number diff --git a/tests/baselines/reference/discriminatedUnionInference.symbols b/tests/baselines/reference/discriminatedUnionInference.symbols new file mode 100644 index 00000000000..d8643b7ba6a --- /dev/null +++ b/tests/baselines/reference/discriminatedUnionInference.symbols @@ -0,0 +1,68 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/discriminatedUnionInference.ts === +// Repro from #28862 + +type Foo = { type: "foo", (): A[] }; +>Foo : Symbol(Foo, Decl(discriminatedUnionInference.ts, 0, 0)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 2, 9)) +>type : Symbol(type, Decl(discriminatedUnionInference.ts, 2, 15)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 2, 9)) + +type Bar = { type: "bar", (): A }; +>Bar : Symbol(Bar, Decl(discriminatedUnionInference.ts, 2, 39)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 3, 9)) +>type : Symbol(type, Decl(discriminatedUnionInference.ts, 3, 15)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 3, 9)) + +type FooBar = Foo | Bar; +>FooBar : Symbol(FooBar, Decl(discriminatedUnionInference.ts, 3, 37)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 5, 12)) +>Foo : Symbol(Foo, Decl(discriminatedUnionInference.ts, 0, 0)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 5, 12)) +>Bar : Symbol(Bar, Decl(discriminatedUnionInference.ts, 2, 39)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 5, 12)) + +type InferA = T extends FooBar ? A : never; +>InferA : Symbol(InferA, Decl(discriminatedUnionInference.ts, 5, 33)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 7, 12)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 7, 12)) +>FooBar : Symbol(FooBar, Decl(discriminatedUnionInference.ts, 3, 37)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 7, 39)) +>A : Symbol(A, Decl(discriminatedUnionInference.ts, 7, 39)) + +type FooA = InferA>; // number +>FooA : Symbol(FooA, Decl(discriminatedUnionInference.ts, 7, 55)) +>InferA : Symbol(InferA, Decl(discriminatedUnionInference.ts, 5, 33)) +>Foo : Symbol(Foo, Decl(discriminatedUnionInference.ts, 0, 0)) + +// Repro from #28862 + +type Item = { kind: 'a', data: T } | { kind: 'b', data: T[] }; +>Item : Symbol(Item, Decl(discriminatedUnionInference.ts, 9, 32)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 13, 10)) +>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 13, 16)) +>data : Symbol(data, Decl(discriminatedUnionInference.ts, 13, 27)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 13, 10)) +>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 13, 41)) +>data : Symbol(data, Decl(discriminatedUnionInference.ts, 13, 52)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 13, 10)) + +declare function foo(item: Item): T; +>foo : Symbol(foo, Decl(discriminatedUnionInference.ts, 13, 65)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 15, 21)) +>item : Symbol(item, Decl(discriminatedUnionInference.ts, 15, 24)) +>Item : Symbol(Item, Decl(discriminatedUnionInference.ts, 9, 32)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 15, 21)) +>T : Symbol(T, Decl(discriminatedUnionInference.ts, 15, 21)) + +let x1 = foo({ kind: 'a', data: 42 }); // number +>x1 : Symbol(x1, Decl(discriminatedUnionInference.ts, 17, 3)) +>foo : Symbol(foo, Decl(discriminatedUnionInference.ts, 13, 65)) +>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 17, 14)) +>data : Symbol(data, Decl(discriminatedUnionInference.ts, 17, 25)) + +let x2 = foo({ kind: 'b', data: [1, 2] }); // number +>x2 : Symbol(x2, Decl(discriminatedUnionInference.ts, 18, 3)) +>foo : Symbol(foo, Decl(discriminatedUnionInference.ts, 13, 65)) +>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 18, 14)) +>data : Symbol(data, Decl(discriminatedUnionInference.ts, 18, 25)) + diff --git a/tests/baselines/reference/discriminatedUnionInference.types b/tests/baselines/reference/discriminatedUnionInference.types new file mode 100644 index 00000000000..65e3db1510a --- /dev/null +++ b/tests/baselines/reference/discriminatedUnionInference.types @@ -0,0 +1,55 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/discriminatedUnionInference.ts === +// Repro from #28862 + +type Foo = { type: "foo", (): A[] }; +>Foo : Foo +>type : "foo" + +type Bar = { type: "bar", (): A }; +>Bar : Bar +>type : "bar" + +type FooBar = Foo | Bar; +>FooBar : FooBar + +type InferA = T extends FooBar ? A : never; +>InferA : InferA + +type FooA = InferA>; // number +>FooA : number + +// Repro from #28862 + +type Item = { kind: 'a', data: T } | { kind: 'b', data: T[] }; +>Item : Item +>kind : "a" +>data : T +>kind : "b" +>data : T[] + +declare function foo(item: Item): T; +>foo : (item: Item) => T +>item : Item + +let x1 = foo({ kind: 'a', data: 42 }); // number +>x1 : number +>foo({ kind: 'a', data: 42 }) : number +>foo : (item: Item) => T +>{ kind: 'a', data: 42 } : { kind: "a"; data: number; } +>kind : "a" +>'a' : "a" +>data : number +>42 : 42 + +let x2 = foo({ kind: 'b', data: [1, 2] }); // number +>x2 : number +>foo({ kind: 'b', data: [1, 2] }) : number +>foo : (item: Item) => T +>{ kind: 'b', data: [1, 2] } : { kind: "b"; data: number[]; } +>kind : "b" +>'b' : "b" +>data : number[] +>[1, 2] : number[] +>1 : 1 +>2 : 2 +