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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
tests/cases/compiler/protectedMembersThisParameter.ts(9,9): error TS2445: Property 'secret' is protected and only accessible within class 'Message' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(30,7): error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(41,7): error TS2446: Property 'a' is protected and only accessible through an instance of class 'C'. This is an instance of class 'B'.
tests/cases/compiler/protectedMembersThisParameter.ts(42,7): error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(46,7): error TS2445: Property 'a' is protected and only accessible within class 'A' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(47,7): error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(51,7): error TS2445: Property 'a' is protected and only accessible within class 'A' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(52,7): error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(55,7): error TS2445: Property 'a' is protected and only accessible within class 'A' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(56,7): error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(64,9): error TS2445: Property 'd1' is protected and only accessible within class 'D1' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(68,9): error TS2445: Property 'd1' is protected and only accessible within class 'D1' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(76,9): error TS2445: Property 'd' is protected and only accessible within class 'D2' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(77,9): error TS2445: Property 'd2' is protected and only accessible within class 'D2' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(80,9): error TS2445: Property 'd' is protected and only accessible within class 'D2' and its subclasses.
tests/cases/compiler/protectedMembersThisParameter.ts(81,9): error TS2445: Property 'd2' is protected and only accessible within class 'D2' and its subclasses.
==== tests/cases/compiler/protectedMembersThisParameter.ts (16 errors) ====
class Message {
protected secret(): void {}
}
class MessageWrapper {
message: Message = new Message();
wrap<T>() {
let m = this.message;
let f = function(this: T) {
m.secret(); // should error
~~~~~~
!!! error TS2445: Property 'secret' is protected and only accessible within class 'Message' and its subclasses.
}
}
}
class A {
protected a() {}
}
class B extends A {
protected b() {}
}
class C extends A {
protected c() {}
}
class Z {
protected z() {}
}
function bA<T extends A>(this: T, arg: B) {
this.a();
arg.a();
arg.b(); // should error to avoid cross-hierarchy protected access https://www.typescriptlang.org/docs/handbook/2/classes.html#cross-hierarchy-protected-access
~
!!! error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
}
function bB<T extends B>(this: T, arg: B) {
this.a();
this.b();
arg.a();
arg.b();
}
function bC<T extends C>(this: T, arg: B) {
this.a();
this.c();
arg.a(); // should error
~
!!! error TS2446: Property 'a' is protected and only accessible through an instance of class 'C'. This is an instance of class 'B'.
arg.b(); // should error
~
!!! error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
}
function bZ<T extends Z>(this: T, arg: B) {
this.z();
arg.a(); // should error
~
!!! error TS2445: Property 'a' is protected and only accessible within class 'A' and its subclasses.
arg.b(); // should error
~
!!! error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
}
function bString<T extends string>(this: T, arg: B) {
this.toLowerCase();
arg.a(); // should error
~
!!! error TS2445: Property 'a' is protected and only accessible within class 'A' and its subclasses.
arg.b(); // should error
~
!!! error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
}
function bAny<T>(this: T, arg: B) {
arg.a(); // should error
~
!!! error TS2445: Property 'a' is protected and only accessible within class 'A' and its subclasses.
arg.b(); // should error
~
!!! error TS2445: Property 'b' is protected and only accessible within class 'B' and its subclasses.
}
class D {
protected d() {}
derived1(arg: D1) {
arg.d();
arg.d1(); // should error
~~
!!! error TS2445: Property 'd1' is protected and only accessible within class 'D1' and its subclasses.
}
derived1ThisD(this: D, arg: D1) {
arg.d();
arg.d1(); // should error
~~
!!! error TS2445: Property 'd1' is protected and only accessible within class 'D1' and its subclasses.
}
derived1ThisD1(this: D1, arg: D1) {
arg.d();
arg.d1();
}
derived2(arg: D2) {
arg.d(); // should error because of overridden method in D2
~
!!! error TS2445: Property 'd' is protected and only accessible within class 'D2' and its subclasses.
arg.d2(); // should error
~~
!!! error TS2445: Property 'd2' is protected and only accessible within class 'D2' and its subclasses.
}
derived2ThisD(this: D, arg: D2) {
arg.d(); // should error because of overridden method in D2
~
!!! error TS2445: Property 'd' is protected and only accessible within class 'D2' and its subclasses.
arg.d2(); // should error
~~
!!! error TS2445: Property 'd2' is protected and only accessible within class 'D2' and its subclasses.
}
derived2ThisD2(this: D2, arg: D2) {
arg.d();
arg.d2();
}
}
class D1 extends D {
protected d1() {}
}
class D2 extends D {
protected d() {}
protected d2() {}
}
|