File: discriminatedUnionInference.js

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (27 lines) | stat: -rw-r--r-- 698 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//// [discriminatedUnionInference.ts]
// Repro from #28862

type Foo<A> = { type: "foo", (): A[] };
type Bar<A> = { type: "bar", (): A };

type FooBar<A> = Foo<A> | Bar<A>;

type InferA<T> = T extends FooBar<infer A> ? A : never;

type FooA = InferA<Foo<number>>;  // number

// Repro from #28862

type Item<T> = { kind: 'a', data: T } | { kind: 'b', data: T[] };

declare function foo<T>(item: Item<T>): 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