mirror of
https://github.com/swc-project/swc.git
synced 2024-12-29 00:23:10 +03:00
114 lines
4.8 KiB
TypeScript
114 lines
4.8 KiB
TypeScript
class Base {
|
|
protected x: string;
|
|
method() {
|
|
class A {
|
|
methoda() {
|
|
var b: Base;
|
|
var d1: Derived1;
|
|
var d2: Derived2;
|
|
var d3: Derived3;
|
|
var d4: Derived4;
|
|
|
|
b.x; // OK, accessed within their declaring class
|
|
d1.x; // OK, accessed within their declaring class
|
|
d2.x; // OK, accessed within their declaring class
|
|
d3.x; // Error, redefined in a subclass, can only be accessed in the declaring class or one of its subclasses
|
|
d4.x; // OK, accessed within their declaring class
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class Derived1 extends Base {
|
|
method1() {
|
|
class B {
|
|
method1b() {
|
|
var b: Base;
|
|
var d1: Derived1;
|
|
var d2: Derived2;
|
|
var d3: Derived3;
|
|
var d4: Derived4;
|
|
|
|
b.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d1.x; // OK, accessed within a class derived from their declaring class, and through an instance of the enclosing class
|
|
d2.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d3.x; // Error, redefined in a subclass, can only be accessed in the declaring class or one of its subclasses
|
|
d4.x; // Error, isn't accessed through an instance of the enclosing class
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class Derived2 extends Base {
|
|
method2() {
|
|
class C {
|
|
method2c() {
|
|
var b: Base;
|
|
var d1: Derived1;
|
|
var d2: Derived2;
|
|
var d3: Derived3;
|
|
var d4: Derived4;
|
|
|
|
b.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d1.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d2.x; // OK, accessed within a class derived from their declaring class, and through an instance of the enclosing class
|
|
d3.x; // Error, redefined in a subclass, can only be accessed in the declaring class or one of its subclasses
|
|
d4.x; // OK, accessed within a class derived from their declaring class, and through an instance of the enclosing class or one of its subclasses
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class Derived3 extends Derived1 {
|
|
protected x: string;
|
|
method3() {
|
|
class D {
|
|
method3d() {
|
|
var b: Base;
|
|
var d1: Derived1;
|
|
var d2: Derived2;
|
|
var d3: Derived3;
|
|
var d4: Derived4;
|
|
|
|
b.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d1.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d2.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d3.x; // OK, accessed within their declaring class
|
|
d4.x; // Error, isn't accessed through an instance of the enclosing class
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class Derived4 extends Derived2 {
|
|
method4() {
|
|
class E {
|
|
method4e() {
|
|
var b: Base;
|
|
var d1: Derived1;
|
|
var d2: Derived2;
|
|
var d3: Derived3;
|
|
var d4: Derived4;
|
|
|
|
b.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d1.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d2.x; // Error, isn't accessed through an instance of the enclosing class
|
|
d3.x; // Error, redefined in a subclass, can only be accessed in the declaring class or one of its subclasses
|
|
d4.x; // OK, accessed within a class derived from their declaring class, and through an instance of the enclosing class
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var b: Base;
|
|
var d1: Derived1;
|
|
var d2: Derived2;
|
|
var d3: Derived3;
|
|
var d4: Derived4;
|
|
|
|
b.x; // Error, neither within their declaring class nor classes derived from their declaring class
|
|
d1.x; // Error, neither within their declaring class nor classes derived from their declaring class
|
|
d2.x; // Error, neither within their declaring class nor classes derived from their declaring class
|
|
d3.x; // Error, neither within their declaring class nor classes derived from their declaring class
|
|
d4.x; // Error, neither within their declaring class nor classes derived from their declaring class
|