File: privateNameInInExpression%28target%3Desnext%29.errors.txt

package info (click to toggle)
node-typescript 5.0.4%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 459,116 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (140 lines) | stat: -rw-r--r-- 5,730 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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(21,29): error TS2571: Object is of type 'unknown'.
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(23,19): error TS2339: Property '#fiel' does not exist on type 'any'.
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(25,20): error TS1451: Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(27,14): error TS2406: The left-hand side of a 'for...in' statement must be a variable or a property access.
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(29,23): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'boolean'.
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(43,27): error TS18047: 'u' is possibly 'null'.
tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts(114,12): error TS18016: Private identifiers are not allowed outside class bodies.


==== tests/cases/conformance/classes/members/privateNames/privateNameInInExpression.ts (7 errors) ====
    class Foo {
        #field = 1;
        static #staticField = 2;
        #method() {}
        static #staticMethod() {}
    
        goodRhs(v: any) {
            const a = #field in v;
    
            const b = #field in v.p1.p2;
    
            const c = #field in (v as {});
    
            const d = #field in (v as Foo);
    
            const e = #field in (v as never);
    
            for (let f in #field in v as any) { /**/ } // unlikely but valid
        }
        badRhs(v: any) {
            const a = #field in (v as unknown); // Bad - RHS of in must be object type or any
                                ~~~~~~~~~~~~~~
!!! error TS2571: Object is of type 'unknown'.
    
            const b = #fiel in v; // Bad - typo in privateID
                      ~~~~~
!!! error TS2339: Property '#fiel' does not exist on type 'any'.
    
            const c = (#field) in v; // Bad - privateID is not an expression on its own
                       ~~~~~~
!!! error TS1451: Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression
    
            for (#field in v) { /**/ } // Bad - 'in' not allowed
                 ~~~~~~
!!! error TS2406: The left-hand side of a 'for...in' statement must be a variable or a property access.
    
            for (let d in #field in v) { /**/ } // Bad - rhs of in should be a object/any
                          ~~~~~~~~~~~
!!! error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'boolean'.
        }
        whitespace(v: any) {
            const a = v && /*0*/#field/*1*/
                /*2*/in/*3*/
                    /*4*/v/*5*/
        }
        flow(u: unknown, n: never, fb: Foo | Bar, fs: FooSub, b: Bar, fsb: FooSub | Bar, fsfb: Foo | FooSub | Bar) {
    
            if (typeof u === 'object') {
                if (#field in n) {
                    n; // good n is never
                }
    
                if (#field in u) {
                              ~
!!! error TS18047: 'u' is possibly 'null'.
                    u; // good u is Foo
                } else {
                    u; // good u is object | null
                }
    
                if (u !== null) {
                    if (#field in u) {
                        u; // good u is Foo
                    } else {
                        u; // good u is object
                    }
    
                    if (#method in u) {
                        u; // good u is Foo
                    }
    
                    if (#staticField in u) {
                        u; // good u is typeof Foo
                    }
    
                    if (#staticMethod in u) {
                        u; // good u is typeof Foo
                    }
                }
            }
    
            if (#field in fb) {
                fb; // good fb is Foo
            } else {
                fb; // good fb is Bar
            }
    
            if (#field in fs) {
                fs; // good fs is FooSub
            } else {
                fs; // good fs is never
            }
    
            if (#field in b) {
                b; // good b is 'Bar & Foo'
            } else {
                b; // good b is Bar
            }
    
            if (#field in fsb) {
                fsb; // good fsb is FooSub
            } else {
                fsb; // good fsb is Bar
            }
    
            if (#field in fsfb) {
                fsfb; // good fsfb is 'Foo | FooSub'
            } else {
                fsfb; // good fsfb is Bar
            }
    
            class Nested {
                m(v: any) {
                    if (#field in v) {
                        v; // good v is Foo
                    }
                }
            }
        }
    }
    
    class FooSub extends Foo { subTypeOfFoo = true }
    class Bar { notFoo = true }
    
    function badSyntax(v: Foo) {
        return #field in v; // Bad - outside of class
               ~~~~~~
!!! error TS18016: Private identifiers are not allowed outside class bodies.
    }