This was we don't get noisy baselines just because a different phase of the compiler reported the diagnostic. This helps with Yui's refactoring work to move grammar checks into the type checker.
167 lines
No EOL
6.1 KiB
Text
167 lines
No EOL
6.1 KiB
Text
tests/cases/compiler/protectedMembers.ts(40,1): error TS2445: Property 'x' is protected and only accessible within class 'C1' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(41,1): error TS2445: Property 'f' is protected and only accessible within class 'C1' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(42,1): error TS2445: Property 'sx' is protected and only accessible within class 'C1' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(43,1): error TS2445: Property 'sf' is protected and only accessible within class 'C1' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(46,1): error TS2445: Property 'x' is protected and only accessible within class 'C1' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(47,1): error TS2445: Property 'f' is protected and only accessible within class 'C2' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(48,1): error TS2445: Property 'sx' is protected and only accessible within class 'C1' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(49,1): error TS2445: Property 'sf' is protected and only accessible within class 'C2' and its subclasses.
|
|
tests/cases/compiler/protectedMembers.ts(68,9): error TS2446: Property 'x' is protected and only accessible through an instance of class 'C'.
|
|
tests/cases/compiler/protectedMembers.ts(69,9): error TS2446: Property 'x' is protected and only accessible through an instance of class 'C'.
|
|
tests/cases/compiler/protectedMembers.ts(86,5): error TS1089: 'protected' modifier cannot appear on a constructor declaration.
|
|
tests/cases/compiler/protectedMembers.ts(98,1): error TS2322: Type 'B1' is not assignable to type 'A1'.
|
|
Property 'x' is protected but type 'B1' is not a class derived from 'A1'.
|
|
tests/cases/compiler/protectedMembers.ts(99,1): error TS2322: Type 'A1' is not assignable to type 'B1'.
|
|
Property 'x' is protected in type 'A1' but public in type 'B1'.
|
|
tests/cases/compiler/protectedMembers.ts(112,7): error TS2415: Class 'B3' incorrectly extends base class 'A3'.
|
|
Property 'x' is protected in type 'B3' but public in type 'A3'.
|
|
|
|
|
|
==== tests/cases/compiler/protectedMembers.ts (14 errors) ====
|
|
// Class with protected members
|
|
class C1 {
|
|
protected x: number;
|
|
protected static sx: number;
|
|
protected f() {
|
|
return this.x;
|
|
}
|
|
protected static sf() {
|
|
return this.sx;
|
|
}
|
|
}
|
|
|
|
// Derived class accessing protected members
|
|
class C2 extends C1 {
|
|
protected f() {
|
|
return super.f() + this.x;
|
|
}
|
|
protected static sf() {
|
|
return super.sf() + this.sx;
|
|
}
|
|
}
|
|
|
|
// Derived class making protected members public
|
|
class C3 extends C2 {
|
|
x: number;
|
|
static sx: number;
|
|
f() {
|
|
return super.f();
|
|
}
|
|
static sf() {
|
|
return super.sf();
|
|
}
|
|
}
|
|
|
|
var c1: C1;
|
|
var c2: C2;
|
|
var c3: C3;
|
|
|
|
// All of these should be errors
|
|
c1.x;
|
|
~~~~
|
|
!!! error TS2445: Property 'x' is protected and only accessible within class 'C1' and its subclasses.
|
|
c1.f();
|
|
~~~~
|
|
!!! error TS2445: Property 'f' is protected and only accessible within class 'C1' and its subclasses.
|
|
C1.sx;
|
|
~~~~~
|
|
!!! error TS2445: Property 'sx' is protected and only accessible within class 'C1' and its subclasses.
|
|
C1.sf();
|
|
~~~~~
|
|
!!! error TS2445: Property 'sf' is protected and only accessible within class 'C1' and its subclasses.
|
|
|
|
// All of these should be errors
|
|
c2.x;
|
|
~~~~
|
|
!!! error TS2445: Property 'x' is protected and only accessible within class 'C1' and its subclasses.
|
|
c2.f();
|
|
~~~~
|
|
!!! error TS2445: Property 'f' is protected and only accessible within class 'C2' and its subclasses.
|
|
C2.sx;
|
|
~~~~~
|
|
!!! error TS2445: Property 'sx' is protected and only accessible within class 'C1' and its subclasses.
|
|
C2.sf();
|
|
~~~~~
|
|
!!! error TS2445: Property 'sf' is protected and only accessible within class 'C2' and its subclasses.
|
|
|
|
// All of these should be ok
|
|
c3.x;
|
|
c3.f();
|
|
C3.sx;
|
|
C3.sf();
|
|
|
|
class A {
|
|
protected x;
|
|
}
|
|
|
|
class B extends A {
|
|
y;
|
|
}
|
|
|
|
class C extends A {
|
|
z;
|
|
static foo(a: A, b: B, c: C, d: D, e: E) {
|
|
a.x = 1; // Error, access must be through C or type derived from C
|
|
~~~
|
|
!!! error TS2446: Property 'x' is protected and only accessible through an instance of class 'C'.
|
|
b.x = 1; // Error, access must be through C or type derived from C
|
|
~~~
|
|
!!! error TS2446: Property 'x' is protected and only accessible through an instance of class 'C'.
|
|
c.x = 1;
|
|
d.x = 1;
|
|
e.x = 1;
|
|
}
|
|
}
|
|
|
|
class D extends C {
|
|
d;
|
|
}
|
|
|
|
interface E extends C {
|
|
e;
|
|
}
|
|
|
|
class CC {
|
|
// Error, constructor cannot be protected
|
|
protected constructor() {
|
|
~~~~~~~~~
|
|
!!! error TS1089: 'protected' modifier cannot appear on a constructor declaration.
|
|
}
|
|
}
|
|
|
|
class A1 {
|
|
protected x;
|
|
}
|
|
class B1 {
|
|
x;
|
|
}
|
|
var a1: A1;
|
|
var b1: B1;
|
|
a1 = b1; // Error, B1 doesn't derive from A1
|
|
~~
|
|
!!! error TS2322: Type 'B1' is not assignable to type 'A1'.
|
|
!!! error TS2322: Property 'x' is protected but type 'B1' is not a class derived from 'A1'.
|
|
b1 = a1; // Error, x is protected in A1 but public in B1
|
|
~~
|
|
!!! error TS2322: Type 'A1' is not assignable to type 'B1'.
|
|
!!! error TS2322: Property 'x' is protected in type 'A1' but public in type 'B1'.
|
|
|
|
class A2 {
|
|
protected x;
|
|
}
|
|
class B2 extends A2 {
|
|
x;
|
|
}
|
|
|
|
class A3 {
|
|
x;
|
|
}
|
|
// Error x is protected in B3 but public in A3
|
|
class B3 extends A3 {
|
|
~~
|
|
!!! error TS2415: Class 'B3' incorrectly extends base class 'A3'.
|
|
!!! error TS2415: Property 'x' is protected in type 'B3' but public in type 'A3'.
|
|
protected x;
|
|
}
|
|
|
|
|