Skip to content

Commit 1896248

Browse files
committed
Accept new baselines
1 parent 4ae0848 commit 1896248

File tree

3 files changed

+150
-0
lines changed

3 files changed

+150
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [discriminatedUnionInference.ts]
2+
// Repro from #28862
3+
4+
type Foo<A> = { type: "foo", (): A[] };
5+
type Bar<A> = { type: "bar", (): A };
6+
7+
type FooBar<A> = Foo<A> | Bar<A>;
8+
9+
type InferA<T> = T extends FooBar<infer A> ? A : never;
10+
11+
type FooA = InferA<Foo<number>>; // number
12+
13+
// Repro from #28862
14+
15+
type Item<T> = { kind: 'a', data: T } | { kind: 'b', data: T[] };
16+
17+
declare function foo<T>(item: Item<T>): T;
18+
19+
let x1 = foo({ kind: 'a', data: 42 }); // number
20+
let x2 = foo({ kind: 'b', data: [1, 2] }); // number
21+
22+
23+
//// [discriminatedUnionInference.js]
24+
"use strict";
25+
// Repro from #28862
26+
var x1 = foo({ kind: 'a', data: 42 }); // number
27+
var x2 = foo({ kind: 'b', data: [1, 2] }); // number
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
=== tests/cases/conformance/types/typeRelationships/typeInference/discriminatedUnionInference.ts ===
2+
// Repro from #28862
3+
4+
type Foo<A> = { type: "foo", (): A[] };
5+
>Foo : Symbol(Foo, Decl(discriminatedUnionInference.ts, 0, 0))
6+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 2, 9))
7+
>type : Symbol(type, Decl(discriminatedUnionInference.ts, 2, 15))
8+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 2, 9))
9+
10+
type Bar<A> = { type: "bar", (): A };
11+
>Bar : Symbol(Bar, Decl(discriminatedUnionInference.ts, 2, 39))
12+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 3, 9))
13+
>type : Symbol(type, Decl(discriminatedUnionInference.ts, 3, 15))
14+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 3, 9))
15+
16+
type FooBar<A> = Foo<A> | Bar<A>;
17+
>FooBar : Symbol(FooBar, Decl(discriminatedUnionInference.ts, 3, 37))
18+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 5, 12))
19+
>Foo : Symbol(Foo, Decl(discriminatedUnionInference.ts, 0, 0))
20+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 5, 12))
21+
>Bar : Symbol(Bar, Decl(discriminatedUnionInference.ts, 2, 39))
22+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 5, 12))
23+
24+
type InferA<T> = T extends FooBar<infer A> ? A : never;
25+
>InferA : Symbol(InferA, Decl(discriminatedUnionInference.ts, 5, 33))
26+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 7, 12))
27+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 7, 12))
28+
>FooBar : Symbol(FooBar, Decl(discriminatedUnionInference.ts, 3, 37))
29+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 7, 39))
30+
>A : Symbol(A, Decl(discriminatedUnionInference.ts, 7, 39))
31+
32+
type FooA = InferA<Foo<number>>; // number
33+
>FooA : Symbol(FooA, Decl(discriminatedUnionInference.ts, 7, 55))
34+
>InferA : Symbol(InferA, Decl(discriminatedUnionInference.ts, 5, 33))
35+
>Foo : Symbol(Foo, Decl(discriminatedUnionInference.ts, 0, 0))
36+
37+
// Repro from #28862
38+
39+
type Item<T> = { kind: 'a', data: T } | { kind: 'b', data: T[] };
40+
>Item : Symbol(Item, Decl(discriminatedUnionInference.ts, 9, 32))
41+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 13, 10))
42+
>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 13, 16))
43+
>data : Symbol(data, Decl(discriminatedUnionInference.ts, 13, 27))
44+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 13, 10))
45+
>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 13, 41))
46+
>data : Symbol(data, Decl(discriminatedUnionInference.ts, 13, 52))
47+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 13, 10))
48+
49+
declare function foo<T>(item: Item<T>): T;
50+
>foo : Symbol(foo, Decl(discriminatedUnionInference.ts, 13, 65))
51+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 15, 21))
52+
>item : Symbol(item, Decl(discriminatedUnionInference.ts, 15, 24))
53+
>Item : Symbol(Item, Decl(discriminatedUnionInference.ts, 9, 32))
54+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 15, 21))
55+
>T : Symbol(T, Decl(discriminatedUnionInference.ts, 15, 21))
56+
57+
let x1 = foo({ kind: 'a', data: 42 }); // number
58+
>x1 : Symbol(x1, Decl(discriminatedUnionInference.ts, 17, 3))
59+
>foo : Symbol(foo, Decl(discriminatedUnionInference.ts, 13, 65))
60+
>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 17, 14))
61+
>data : Symbol(data, Decl(discriminatedUnionInference.ts, 17, 25))
62+
63+
let x2 = foo({ kind: 'b', data: [1, 2] }); // number
64+
>x2 : Symbol(x2, Decl(discriminatedUnionInference.ts, 18, 3))
65+
>foo : Symbol(foo, Decl(discriminatedUnionInference.ts, 13, 65))
66+
>kind : Symbol(kind, Decl(discriminatedUnionInference.ts, 18, 14))
67+
>data : Symbol(data, Decl(discriminatedUnionInference.ts, 18, 25))
68+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
=== tests/cases/conformance/types/typeRelationships/typeInference/discriminatedUnionInference.ts ===
2+
// Repro from #28862
3+
4+
type Foo<A> = { type: "foo", (): A[] };
5+
>Foo : Foo<A>
6+
>type : "foo"
7+
8+
type Bar<A> = { type: "bar", (): A };
9+
>Bar : Bar<A>
10+
>type : "bar"
11+
12+
type FooBar<A> = Foo<A> | Bar<A>;
13+
>FooBar : FooBar<A>
14+
15+
type InferA<T> = T extends FooBar<infer A> ? A : never;
16+
>InferA : InferA<T>
17+
18+
type FooA = InferA<Foo<number>>; // number
19+
>FooA : number
20+
21+
// Repro from #28862
22+
23+
type Item<T> = { kind: 'a', data: T } | { kind: 'b', data: T[] };
24+
>Item : Item<T>
25+
>kind : "a"
26+
>data : T
27+
>kind : "b"
28+
>data : T[]
29+
30+
declare function foo<T>(item: Item<T>): T;
31+
>foo : <T>(item: Item<T>) => T
32+
>item : Item<T>
33+
34+
let x1 = foo({ kind: 'a', data: 42 }); // number
35+
>x1 : number
36+
>foo({ kind: 'a', data: 42 }) : number
37+
>foo : <T>(item: Item<T>) => T
38+
>{ kind: 'a', data: 42 } : { kind: "a"; data: number; }
39+
>kind : "a"
40+
>'a' : "a"
41+
>data : number
42+
>42 : 42
43+
44+
let x2 = foo({ kind: 'b', data: [1, 2] }); // number
45+
>x2 : number
46+
>foo({ kind: 'b', data: [1, 2] }) : number
47+
>foo : <T>(item: Item<T>) => T
48+
>{ kind: 'b', data: [1, 2] } : { kind: "b"; data: number[]; }
49+
>kind : "b"
50+
>'b' : "b"
51+
>data : number[]
52+
>[1, 2] : number[]
53+
>1 : 1
54+
>2 : 2
55+

0 commit comments

Comments
 (0)