File: enumLiteralAssignableToEnumInsideUnion.types

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 (120 lines) | stat: -rw-r--r-- 1,955 bytes parent folder | download | duplicates (4)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
=== tests/cases/compiler/enumLiteralAssignableToEnumInsideUnion.ts ===
module X {
>X : typeof X

    export enum Foo {
>Foo : Foo

        A, B
>A : Foo.A
>B : Foo.B
    }
}
module Y {
>Y : typeof Y

    export enum Foo {
>Foo : Foo

        A, B
>A : Foo.A
>B : Foo.B
    }
}
module Z {
>Z : typeof Z

    export enum Foo {
>Foo : Foo

        A = 1 << 1,
>A : Foo
>1 << 1 : number
>1 : 1
>1 : 1

        B = 1 << 2,
>B : Foo
>1 << 2 : number
>1 : 1
>2 : 2
    }
}
module Ka {
>Ka : typeof Ka

    export enum Foo {
>Foo : Foo

        A = 1 << 10,
>A : Foo
>1 << 10 : number
>1 : 1
>10 : 10

        B = 1 << 11,
>B : Foo
>1 << 11 : number
>1 : 1
>11 : 11
    }
}
const e0: X.Foo | boolean = Y.Foo.A; // ok
>e0 : boolean | X.Foo
>X : any
>Y.Foo.A : Y.Foo.A
>Y.Foo : typeof Y.Foo
>Y : typeof Y
>Foo : typeof Y.Foo
>A : Y.Foo.A

const e1: X.Foo | boolean = Z.Foo.A; // not legal, Z is computed
>e1 : boolean | X.Foo
>X : any
>Z.Foo.A : Z.Foo
>Z.Foo : typeof Z.Foo
>Z : typeof Z
>Foo : typeof Z.Foo
>A : Z.Foo

const e2: X.Foo.A | X.Foo.B | boolean = Z.Foo.A; // still not legal
>e2 : boolean | X.Foo
>X : any
>Foo : any
>X : any
>Foo : any
>Z.Foo.A : Z.Foo
>Z.Foo : typeof Z.Foo
>Z : typeof Z
>Foo : typeof Z.Foo
>A : Z.Foo

const e3: X.Foo.B | boolean = Z.Foo.A; // not legal
>e3 : boolean | X.Foo.B
>X : any
>Foo : any
>Z.Foo.A : Z.Foo
>Z.Foo : typeof Z.Foo
>Z : typeof Z
>Foo : typeof Z.Foo
>A : Z.Foo

const e4: X.Foo.A | boolean = Z.Foo.A; // not legal either because Z.Foo is computed and Z.Foo.A is not necessarily assignable to X.Foo.A
>e4 : boolean | X.Foo.A
>X : any
>Foo : any
>Z.Foo.A : Z.Foo
>Z.Foo : typeof Z.Foo
>Z : typeof Z
>Foo : typeof Z.Foo
>A : Z.Foo

const e5: Ka.Foo | boolean = Z.Foo.A; // ok
>e5 : boolean | Ka.Foo
>Ka : any
>Z.Foo.A : Z.Foo
>Z.Foo : typeof Z.Foo
>Z : typeof Z
>Foo : typeof Z.Foo
>A : Z.Foo