Skip to content

Commit f5816ab

Browse files
authored
update keyof tests and ?? (#62)
* replace ?? with || * update keyof tests
1 parent a60e429 commit f5816ab

File tree

6 files changed

+137
-7
lines changed

6 files changed

+137
-7
lines changed

src/compiler/transformers/classFields.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ namespace ts {
750750
}
751751
else {
752752
const expressions: Expression[] = [];
753-
temp = temp ?? createClassTempVar ();
753+
temp ||= createClassTempVar();
754754
if (isClassWithConstructorReference) {
755755
// record an alias as the class name is not in scope for statics.
756756
enableSubstitutionForClassAliases();
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(14,1): error TS2322: Type '"#fooField"' is not assignable to type 'keyof A'.
2+
tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(15,1): error TS2322: Type '"#fooMethod"' is not assignable to type 'keyof A'.
3+
tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(16,1): error TS2322: Type '"#fooProp"' is not assignable to type 'keyof A'.
4+
tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(18,1): error TS2322: Type '"fooField"' is not assignable to type 'keyof A'.
5+
tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(19,1): error TS2322: Type '"fooMethod"' is not assignable to type 'keyof A'.
6+
tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts(20,1): error TS2322: Type '"fooProp"' is not assignable to type 'keyof A'.
7+
8+
9+
==== tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts (6 errors) ====
10+
class A {
11+
#fooField = 3;
12+
#fooMethod() { };
13+
get #fooProp() { return 1; };
14+
set #fooProp(value: number) { };
15+
bar = 3;
16+
baz = 3;
17+
}
18+
19+
// `keyof A` should not include '#foo*'
20+
let k: keyof A = "bar"; // OK
21+
k = "baz"; // OK
22+
23+
k = "#fooField"; // Error
24+
~
25+
!!! error TS2322: Type '"#fooField"' is not assignable to type 'keyof A'.
26+
k = "#fooMethod"; // Error
27+
~
28+
!!! error TS2322: Type '"#fooMethod"' is not assignable to type 'keyof A'.
29+
k = "#fooProp"; // Error
30+
~
31+
!!! error TS2322: Type '"#fooProp"' is not assignable to type 'keyof A'.
32+
33+
k = "fooField"; // Error
34+
~
35+
!!! error TS2322: Type '"fooField"' is not assignable to type 'keyof A'.
36+
k = "fooMethod"; // Error
37+
~
38+
!!! error TS2322: Type '"fooMethod"' is not assignable to type 'keyof A'.
39+
k = "fooProp"; // Error
40+
~
41+
!!! error TS2322: Type '"fooProp"' is not assignable to type 'keyof A'.
42+

tests/baselines/reference/privateNamesAndkeyof.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,17 @@ class A {
88
baz = 3;
99
}
1010

11-
type T = keyof A // should not include '#foo*'
11+
// `keyof A` should not include '#foo*'
12+
let k: keyof A = "bar"; // OK
13+
k = "baz"; // OK
14+
15+
k = "#fooField"; // Error
16+
k = "#fooMethod"; // Error
17+
k = "#fooProp"; // Error
18+
19+
k = "fooField"; // Error
20+
k = "fooMethod"; // Error
21+
k = "fooProp"; // Error
1222

1323

1424
//// [privateNamesAndkeyof.js]
@@ -26,3 +36,12 @@ class A {
2636
;
2737
}
2838
_A_fooField = new WeakMap(), _A_instances = new WeakSet(), _A_fooMethod = function _A_fooMethod() { }, _A_fooProp_get = function _A_fooProp_get() { return 1; }, _A_fooProp_set = function _A_fooProp_set(value) { };
39+
// `keyof A` should not include '#foo*'
40+
let k = "bar"; // OK
41+
k = "baz"; // OK
42+
k = "#fooField"; // Error
43+
k = "#fooMethod"; // Error
44+
k = "#fooProp"; // Error
45+
k = "fooField"; // Error
46+
k = "fooMethod"; // Error
47+
k = "fooProp"; // Error

tests/baselines/reference/privateNamesAndkeyof.symbols

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,29 @@ class A {
2222
>baz : Symbol(A.baz, Decl(privateNamesAndkeyof.ts, 5, 12))
2323
}
2424

25-
type T = keyof A // should not include '#foo*'
26-
>T : Symbol(T, Decl(privateNamesAndkeyof.ts, 7, 1))
25+
// `keyof A` should not include '#foo*'
26+
let k: keyof A = "bar"; // OK
27+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
2728
>A : Symbol(A, Decl(privateNamesAndkeyof.ts, 0, 0))
2829

30+
k = "baz"; // OK
31+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
32+
33+
k = "#fooField"; // Error
34+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
35+
36+
k = "#fooMethod"; // Error
37+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
38+
39+
k = "#fooProp"; // Error
40+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
41+
42+
k = "fooField"; // Error
43+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
44+
45+
k = "fooMethod"; // Error
46+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
47+
48+
k = "fooProp"; // Error
49+
>k : Symbol(k, Decl(privateNamesAndkeyof.ts, 10, 3))
50+

tests/baselines/reference/privateNamesAndkeyof.types

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,43 @@ class A {
2626
>3 : 3
2727
}
2828

29-
type T = keyof A // should not include '#foo*'
30-
>T : keyof A
29+
// `keyof A` should not include '#foo*'
30+
let k: keyof A = "bar"; // OK
31+
>k : keyof A
32+
>"bar" : "bar"
33+
34+
k = "baz"; // OK
35+
>k = "baz" : "baz"
36+
>k : keyof A
37+
>"baz" : "baz"
38+
39+
k = "#fooField"; // Error
40+
>k = "#fooField" : "#fooField"
41+
>k : keyof A
42+
>"#fooField" : "#fooField"
43+
44+
k = "#fooMethod"; // Error
45+
>k = "#fooMethod" : "#fooMethod"
46+
>k : keyof A
47+
>"#fooMethod" : "#fooMethod"
48+
49+
k = "#fooProp"; // Error
50+
>k = "#fooProp" : "#fooProp"
51+
>k : keyof A
52+
>"#fooProp" : "#fooProp"
53+
54+
k = "fooField"; // Error
55+
>k = "fooField" : "fooField"
56+
>k : keyof A
57+
>"fooField" : "fooField"
58+
59+
k = "fooMethod"; // Error
60+
>k = "fooMethod" : "fooMethod"
61+
>k : keyof A
62+
>"fooMethod" : "fooMethod"
63+
64+
k = "fooProp"; // Error
65+
>k = "fooProp" : "fooProp"
66+
>k : keyof A
67+
>"fooProp" : "fooProp"
3168

tests/cases/conformance/classes/members/privateNames/privateNamesAndkeyof.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,14 @@ class A {
1010
baz = 3;
1111
}
1212

13-
type T = keyof A // should not include '#foo*'
13+
// `keyof A` should not include '#foo*'
14+
let k: keyof A = "bar"; // OK
15+
k = "baz"; // OK
16+
17+
k = "#fooField"; // Error
18+
k = "#fooMethod"; // Error
19+
k = "#fooProp"; // Error
20+
21+
k = "fooField"; // Error
22+
k = "fooMethod"; // Error
23+
k = "fooProp"; // Error

0 commit comments

Comments
 (0)