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
|
//// [privateNameInInExpressionTransform.ts]
class Foo {
#field = 1;
#method() {}
static #staticField= 2;
static #staticMethod() {}
check(v: any) {
#field in v; // expect Foo's 'field' WeakMap
#method in v; // expect Foo's 'instances' WeakSet
#staticField in v; // expect Foo's constructor
#staticMethod in v; // expect Foo's constructor
}
precedence(v: any) {
// '==' and '||' have lower precedence than 'in'
// 'in' naturally has same precedence as 'in'
// '<<' has higher precedence than 'in'
v == #field in v || v; // Good precedence: (v == (#field in v)) || v
v << #field in v << v; // Good precedence (SyntaxError): (v << #field) in (v << v)
v << #field in v == v; // Good precedence (SyntaxError): ((v << #field) in v) == v
v == #field in v in v; // Good precedence: v == ((#field in v) in v)
#field in v && #field in v; // Good precedence: (#field in v) && (#field in v)
}
invalidLHS(v: any) {
'prop' in v = 10;
#field in v = 10;
}
}
class Bar {
#field = 1;
check(v: any) {
#field in v; // expect Bar's 'field' WeakMap
}
}
function syntaxError(v: Foo) {
return #field in v; // expect `return in v` so runtime will have a syntax error
}
export { }
//// [privateNameInInExpressionTransform.js]
class Foo {
#field = 1;
#method() { }
static #staticField = 2;
static #staticMethod() { }
check(v) {
#field in v; // expect Foo's 'field' WeakMap
#method in v; // expect Foo's 'instances' WeakSet
#staticField in v; // expect Foo's constructor
#staticMethod in v; // expect Foo's constructor
}
precedence(v) {
// '==' and '||' have lower precedence than 'in'
// 'in' naturally has same precedence as 'in'
// '<<' has higher precedence than 'in'
v == #field in v || v; // Good precedence: (v == (#field in v)) || v
v << #field in v << v; // Good precedence (SyntaxError): (v << #field) in (v << v)
v << #field in v == v; // Good precedence (SyntaxError): ((v << #field) in v) == v
v == #field in v in v; // Good precedence: v == ((#field in v) in v)
#field in v && #field in v; // Good precedence: (#field in v) && (#field in v)
}
invalidLHS(v) {
'prop' in v;
10;
#field in v;
10;
}
}
class Bar {
#field = 1;
check(v) {
#field in v; // expect Bar's 'field' WeakMap
}
}
function syntaxError(v) {
return #field in v; // expect `return in v` so runtime will have a syntax error
}
export {};
|