don't throw classNameTDZError if referenced identifier is within a TypeAnnotation (#9190)
fix #9189 Obviously this code is intended to throw an error if someone tries to reference a class before it's defined, like: ```js class Foo { someField = Foo; } ``` But there's no problem with referencing the class in a type annotation before it's defined, and this is often necessary for tree structures: ```js class Foo { [someSymbol]: Foo; } ```
This commit is contained in:
parent
c1499b13ac
commit
3c8e15dbc1
@ -0,0 +1,7 @@
|
|||||||
|
const sym = Symbol();
|
||||||
|
const sym1 = Symbol();
|
||||||
|
|
||||||
|
class A {
|
||||||
|
[sym]: A.B;
|
||||||
|
[sym1]: Array<A>;
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
"flow"
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
"proposal-class-properties"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
const sym = Symbol();
|
||||||
|
const sym1 = Symbol();
|
||||||
|
|
||||||
|
class A {
|
||||||
|
constructor() {
|
||||||
|
_defineProperty(this, sym, void 0);
|
||||||
|
|
||||||
|
_defineProperty(this, sym1, void 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
const sym = Symbol();
|
||||||
|
|
||||||
|
class A {
|
||||||
|
[sym]: A;
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
"flow"
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
"proposal-class-properties"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
const sym = Symbol();
|
||||||
|
|
||||||
|
class A {
|
||||||
|
constructor() {
|
||||||
|
_defineProperty(this, sym, void 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -40,6 +40,9 @@ function skipAllButComputedKey(path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const environmentVisitor = {
|
export const environmentVisitor = {
|
||||||
|
TypeAnnotation(path) {
|
||||||
|
path.skip();
|
||||||
|
},
|
||||||
Function(path) {
|
Function(path) {
|
||||||
// Methods will be handled by the Method visit
|
// Methods will be handled by the Method visit
|
||||||
if (path.isMethod()) return;
|
if (path.isMethod()) return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user