File: literalFreshnessPropagationOnNarrowing.errors.txt

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (72 lines) | stat: -rw-r--r-- 2,232 bytes parent folder | download
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
tests/cases/compiler/literalFreshnessPropagationOnNarrowing.ts(37,5): error TS2322: Type '"y"' is not assignable to type '"x"'.
tests/cases/compiler/literalFreshnessPropagationOnNarrowing.ts(60,5): error TS2322: Type 'string[]' is not assignable to type 'XY[]'.
  Type 'string' is not assignable to type 'XY'.


==== tests/cases/compiler/literalFreshnessPropagationOnNarrowing.ts (2 errors) ====
    function f1() {
        let b = true;
        let obj = { b };
        // Desired: OK
        // 3.0: OK
        // 3.1 as-is: OK
        // 3.1 minus widening propagation: error
        obj.b = false;
    }
    
    function f2() {
        type Element = (string | false);
        type ElementOrArray = Element | Element[]; 
        let el: Element = null as any;
        let arr: Element[] = null as any;
        let elOrA: ElementOrArray = null as any;
    
        // Desired/actual: All OK
        let a1: ElementOrArray = el;
        let a2: ElementOrArray = arr;
        let a3: ElementOrArray = [el];
        let a4: ElementOrArray = Array.isArray(elOrA) ? elOrA : [elOrA];
    
        // Desired: OK
        // 3.0: Error
        // 3.1: OK
        let a5: ElementOrArray = [...Array.isArray(elOrA) ? elOrA : [elOrA]];
    }
    
    function f3() {
        type XY = 'x' | 'y';
        const x: XY = 'x';
        let x2 = x;
        // Desired: OK (up for debate?)
        // 3.0: Error
        // 3.1 as-is: OK
        x2 = 'y';
        ~~
!!! error TS2322: Type '"y"' is not assignable to type '"x"'.
    
        // Desired/actual: All OK
        let x3: XY = x;
        x3 = 'y';
    }
    
    function f4() {
        const x: boolean = true;
        let x1 = x;
        // Desired: OK
        // 3.0: OK
        // 3.1: OK
        // 3.1 minus widening propagation: error
        x1 = false;
    }
    
    function f5() {
        type XY = 'x' | 'y';
        let arr: XY[] = ['x'];
        arr = ['y'];
        // Desired: OK
        // Error in all extant branches
        arr = [...['y']];
        ~~~
!!! error TS2322: Type 'string[]' is not assignable to type 'XY[]'.
!!! error TS2322:   Type 'string' is not assignable to type 'XY'.
    }