File: narrowingIntersection.ts

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (24 lines) | stat: -rw-r--r-- 570 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Somehow this being an intersection matters.
type FooAndBaz = { foo: unknown } & { baz: unknown };

type Disjoint =
 | { readonly value: string; readonly err?: never; }
 | { readonly value?: never; readonly err: FooAndBaz; };

function test1(result: Disjoint): string {
    if (result.err) {
        throw result.err;
    }
    // Error, should OK
    return result.value;
}

type TrivialIntersection = { a: 1 } & { a: 1 };

function want0(x: 0) {}

function test2(a: 0 | TrivialIntersection) {
    if (a === 0) {
        want0(a); // Fails, but expect to work
    }
}