diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c3119b1e64..3fb59928b3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -23279,7 +23279,7 @@ namespace ts { } const thisType = getTypeFromTypeNode(thisParameter.type); - enclosingClass = ((thisType.flags & TypeFlags.TypeParameter) ? getConstraintOfTypeParameter(thisType) : thisType) as InterfaceType; + enclosingClass = (((thisType.flags & TypeFlags.TypeParameter) ? getConstraintOfTypeParameter(thisType) : thisType) as TypeReference).target; } // No further restrictions for static properties if (flags & ModifierFlags.Static) { diff --git a/tests/baselines/reference/thisTypeAccessibility.errors.txt b/tests/baselines/reference/thisTypeAccessibility.errors.txt index 915d6f20b8..63859d003d 100644 --- a/tests/baselines/reference/thisTypeAccessibility.errors.txt +++ b/tests/baselines/reference/thisTypeAccessibility.errors.txt @@ -1,15 +1,18 @@ -tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(17,10): error TS2341: Property 'p' is private and only accessible within class 'MyClass'. -tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(20,13): error TS2341: Property 'sp' is private and only accessible within class 'MyClass'. -tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(21,13): error TS2445: Property 'spp' is protected and only accessible within class 'MyClass' and its subclasses. tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(26,10): error TS2341: Property 'p' is private and only accessible within class 'MyClass'. tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(29,13): error TS2341: Property 'sp' is private and only accessible within class 'MyClass'. tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(30,13): error TS2445: Property 'spp' is protected and only accessible within class 'MyClass' and its subclasses. tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(35,10): error TS2341: Property 'p' is private and only accessible within class 'MyClass'. tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(38,13): error TS2341: Property 'sp' is private and only accessible within class 'MyClass'. tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(39,13): error TS2445: Property 'spp' is protected and only accessible within class 'MyClass' and its subclasses. +tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(44,10): error TS2341: Property 'p' is private and only accessible within class 'MyClass'. +tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(47,13): error TS2341: Property 'sp' is private and only accessible within class 'MyClass'. +tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(48,13): error TS2445: Property 'spp' is protected and only accessible within class 'MyClass' and its subclasses. +tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(55,10): error TS2341: Property 'p' is private and only accessible within class 'MyGenericClass'. +tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(58,20): error TS2341: Property 'sp' is private and only accessible within class 'MyGenericClass'. +tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(59,20): error TS2445: Property 'spp' is protected and only accessible within class 'MyGenericClass' and its subclasses. -==== tests/cases/conformance/types/thisType/thisTypeAccessibility.ts (9 errors) ==== +==== tests/cases/conformance/types/thisType/thisTypeAccessibility.ts (12 errors) ==== class MyClass { private p: number = 123; protected pp: number = 123; @@ -25,6 +28,15 @@ tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(39,13): error TS extension3(p: number): void; } + class MyGenericClass { + private p: T; + protected pp: T; + public ppp: T; + private static sp: number; + protected static spp: number; + public static sppp: number; + } + MyClass.prototype.extension1 = function (this: MyClass, p: number) { this.p = p; ~ @@ -71,4 +83,19 @@ tests/cases/conformance/types/thisType/thisTypeAccessibility.ts(39,13): error TS } MyClass.prototype.extension3 = extension3; + + function extension4(this: MyGenericClass, p: T) { + this.p = p; + ~ +!!! error TS2341: Property 'p' is private and only accessible within class 'MyGenericClass'. + this.pp = p; + this.ppp = p; + MyGenericClass.sp = p; + ~~ +!!! error TS2341: Property 'sp' is private and only accessible within class 'MyGenericClass'. + MyGenericClass.spp = p; + ~~~ +!!! error TS2445: Property 'spp' is protected and only accessible within class 'MyGenericClass' and its subclasses. + MyGenericClass.sppp = p; + } \ No newline at end of file diff --git a/tests/baselines/reference/thisTypeAccessibility.js b/tests/baselines/reference/thisTypeAccessibility.js index 04340cebcd..0f39317460 100644 --- a/tests/baselines/reference/thisTypeAccessibility.js +++ b/tests/baselines/reference/thisTypeAccessibility.js @@ -14,6 +14,15 @@ interface MyClass { extension3(p: number): void; } +class MyGenericClass { + private p: T; + protected pp: T; + public ppp: T; + private static sp: number; + protected static spp: number; + public static sppp: number; +} + MyClass.prototype.extension1 = function (this: MyClass, p: number) { this.p = p; this.pp = p; @@ -42,6 +51,15 @@ function extension3 (this: T, p: number) { } MyClass.prototype.extension3 = extension3; + +function extension4(this: MyGenericClass, p: T) { + this.p = p; + this.pp = p; + this.ppp = p; + MyGenericClass.sp = p; + MyGenericClass.spp = p; + MyGenericClass.sppp = p; +} //// [thisTypeAccessibility.js] @@ -56,6 +74,11 @@ var MyClass = /** @class */ (function () { MyClass.sppp = 123; return MyClass; }()); +var MyGenericClass = /** @class */ (function () { + function MyGenericClass() { + } + return MyGenericClass; +}()); MyClass.prototype.extension1 = function (p) { this.p = p; this.pp = p; @@ -81,3 +104,11 @@ function extension3(p) { MyClass.sppp = p; } MyClass.prototype.extension3 = extension3; +function extension4(p) { + this.p = p; + this.pp = p; + this.ppp = p; + MyGenericClass.sp = p; + MyGenericClass.spp = p; + MyGenericClass.sppp = p; +} diff --git a/tests/baselines/reference/thisTypeAccessibility.symbols b/tests/baselines/reference/thisTypeAccessibility.symbols index bbb62fa57b..eeb86117b3 100644 --- a/tests/baselines/reference/thisTypeAccessibility.symbols +++ b/tests/baselines/reference/thisTypeAccessibility.symbols @@ -37,51 +37,77 @@ interface MyClass { >p : Symbol(p, Decl(thisTypeAccessibility.ts, 12, 15)) } +class MyGenericClass { +>MyGenericClass : Symbol(MyGenericClass, Decl(thisTypeAccessibility.ts, 13, 1)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 15, 21)) + + private p: T; +>p : Symbol(MyGenericClass.p, Decl(thisTypeAccessibility.ts, 15, 25)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 15, 21)) + + protected pp: T; +>pp : Symbol(MyGenericClass.pp, Decl(thisTypeAccessibility.ts, 16, 17)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 15, 21)) + + public ppp: T; +>ppp : Symbol(MyGenericClass.ppp, Decl(thisTypeAccessibility.ts, 17, 20)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 15, 21)) + + private static sp: number; +>sp : Symbol(MyGenericClass.sp, Decl(thisTypeAccessibility.ts, 18, 18)) + + protected static spp: number; +>spp : Symbol(MyGenericClass.spp, Decl(thisTypeAccessibility.ts, 19, 30)) + + public static sppp: number; +>sppp : Symbol(MyGenericClass.sppp, Decl(thisTypeAccessibility.ts, 20, 33)) +} + MyClass.prototype.extension1 = function (this: MyClass, p: number) { >MyClass.prototype.extension1 : Symbol(MyClass.extension1, Decl(thisTypeAccessibility.ts, 9, 19)) >MyClass.prototype : Symbol(MyClass.prototype) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >prototype : Symbol(MyClass.prototype) >extension1 : Symbol(MyClass.extension1, Decl(thisTypeAccessibility.ts, 9, 19)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 15, 41)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 41)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) this.p = p; >this.p : Symbol(MyClass.p, Decl(thisTypeAccessibility.ts, 0, 15)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 15, 41)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 41)) >p : Symbol(MyClass.p, Decl(thisTypeAccessibility.ts, 0, 15)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) this.pp = p; >this.pp : Symbol(MyClass.pp, Decl(thisTypeAccessibility.ts, 1, 28)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 15, 41)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 41)) >pp : Symbol(MyClass.pp, Decl(thisTypeAccessibility.ts, 1, 28)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) this.ppp = p; >this.ppp : Symbol(MyClass.ppp, Decl(thisTypeAccessibility.ts, 2, 31)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 15, 41)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 41)) >ppp : Symbol(MyClass.ppp, Decl(thisTypeAccessibility.ts, 2, 31)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) MyClass.sp = p; >MyClass.sp : Symbol(MyClass.sp, Decl(thisTypeAccessibility.ts, 3, 29)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >sp : Symbol(MyClass.sp, Decl(thisTypeAccessibility.ts, 3, 29)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) MyClass.spp = p; >MyClass.spp : Symbol(MyClass.spp, Decl(thisTypeAccessibility.ts, 4, 36)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >spp : Symbol(MyClass.spp, Decl(thisTypeAccessibility.ts, 4, 36)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) MyClass.sppp = p; >MyClass.sppp : Symbol(MyClass.sppp, Decl(thisTypeAccessibility.ts, 5, 39)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >sppp : Symbol(MyClass.sppp, Decl(thisTypeAccessibility.ts, 5, 39)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 15, 55)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 55)) } MyClass.prototype.extension2 = function (this: T, p: number) { @@ -90,92 +116,92 @@ MyClass.prototype.extension2 = function (this: T, p: number) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >prototype : Symbol(MyClass.prototype) >extension2 : Symbol(MyClass.extension2, Decl(thisTypeAccessibility.ts, 10, 32)) ->T : Symbol(T, Decl(thisTypeAccessibility.ts, 24, 40)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 33, 40)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 60)) ->T : Symbol(T, Decl(thisTypeAccessibility.ts, 24, 40)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 60)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 33, 40)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) this.p = p; >this.p : Symbol(MyClass.p, Decl(thisTypeAccessibility.ts, 0, 15)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 60)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 60)) >p : Symbol(MyClass.p, Decl(thisTypeAccessibility.ts, 0, 15)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) this.pp = p; >this.pp : Symbol(MyClass.pp, Decl(thisTypeAccessibility.ts, 1, 28)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 60)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 60)) >pp : Symbol(MyClass.pp, Decl(thisTypeAccessibility.ts, 1, 28)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) this.ppp = p; >this.ppp : Symbol(MyClass.ppp, Decl(thisTypeAccessibility.ts, 2, 31)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 24, 60)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 60)) >ppp : Symbol(MyClass.ppp, Decl(thisTypeAccessibility.ts, 2, 31)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) MyClass.sp = p; >MyClass.sp : Symbol(MyClass.sp, Decl(thisTypeAccessibility.ts, 3, 29)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >sp : Symbol(MyClass.sp, Decl(thisTypeAccessibility.ts, 3, 29)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) MyClass.spp = p; >MyClass.spp : Symbol(MyClass.spp, Decl(thisTypeAccessibility.ts, 4, 36)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >spp : Symbol(MyClass.spp, Decl(thisTypeAccessibility.ts, 4, 36)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) MyClass.sppp = p; >MyClass.sppp : Symbol(MyClass.sppp, Decl(thisTypeAccessibility.ts, 5, 39)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >sppp : Symbol(MyClass.sppp, Decl(thisTypeAccessibility.ts, 5, 39)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 24, 68)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 68)) } function extension3 (this: T, p: number) { ->extension3 : Symbol(extension3, Decl(thisTypeAccessibility.ts, 31, 1)) ->T : Symbol(T, Decl(thisTypeAccessibility.ts, 33, 20)) +>extension3 : Symbol(extension3, Decl(thisTypeAccessibility.ts, 40, 1)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 42, 20)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 40)) ->T : Symbol(T, Decl(thisTypeAccessibility.ts, 33, 20)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 42, 40)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 42, 20)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) this.p = p; >this.p : Symbol(MyClass.p, Decl(thisTypeAccessibility.ts, 0, 15)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 40)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 42, 40)) >p : Symbol(MyClass.p, Decl(thisTypeAccessibility.ts, 0, 15)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) this.pp = p; >this.pp : Symbol(MyClass.pp, Decl(thisTypeAccessibility.ts, 1, 28)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 40)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 42, 40)) >pp : Symbol(MyClass.pp, Decl(thisTypeAccessibility.ts, 1, 28)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) this.ppp = p; >this.ppp : Symbol(MyClass.ppp, Decl(thisTypeAccessibility.ts, 2, 31)) ->this : Symbol(this, Decl(thisTypeAccessibility.ts, 33, 40)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 42, 40)) >ppp : Symbol(MyClass.ppp, Decl(thisTypeAccessibility.ts, 2, 31)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) MyClass.sp = p; >MyClass.sp : Symbol(MyClass.sp, Decl(thisTypeAccessibility.ts, 3, 29)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >sp : Symbol(MyClass.sp, Decl(thisTypeAccessibility.ts, 3, 29)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) MyClass.spp = p; >MyClass.spp : Symbol(MyClass.spp, Decl(thisTypeAccessibility.ts, 4, 36)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >spp : Symbol(MyClass.spp, Decl(thisTypeAccessibility.ts, 4, 36)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) MyClass.sppp = p; >MyClass.sppp : Symbol(MyClass.sppp, Decl(thisTypeAccessibility.ts, 5, 39)) >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >sppp : Symbol(MyClass.sppp, Decl(thisTypeAccessibility.ts, 5, 39)) ->p : Symbol(p, Decl(thisTypeAccessibility.ts, 33, 48)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 42, 48)) } MyClass.prototype.extension3 = extension3; @@ -184,5 +210,51 @@ MyClass.prototype.extension3 = extension3; >MyClass : Symbol(MyClass, Decl(thisTypeAccessibility.ts, 0, 0), Decl(thisTypeAccessibility.ts, 7, 1)) >prototype : Symbol(MyClass.prototype) >extension3 : Symbol(MyClass.extension3, Decl(thisTypeAccessibility.ts, 11, 32)) ->extension3 : Symbol(extension3, Decl(thisTypeAccessibility.ts, 31, 1)) +>extension3 : Symbol(extension3, Decl(thisTypeAccessibility.ts, 40, 1)) + +function extension4(this: MyGenericClass, p: T) { +>extension4 : Symbol(extension4, Decl(thisTypeAccessibility.ts, 51, 42)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 53, 20)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 53, 38)) +>MyGenericClass : Symbol(MyGenericClass, Decl(thisTypeAccessibility.ts, 13, 1)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 53, 20)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) +>T : Symbol(T, Decl(thisTypeAccessibility.ts, 53, 20)) + + this.p = p; +>this.p : Symbol(MyGenericClass.p, Decl(thisTypeAccessibility.ts, 15, 25)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 53, 38)) +>p : Symbol(MyGenericClass.p, Decl(thisTypeAccessibility.ts, 15, 25)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) + + this.pp = p; +>this.pp : Symbol(MyGenericClass.pp, Decl(thisTypeAccessibility.ts, 16, 17)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 53, 38)) +>pp : Symbol(MyGenericClass.pp, Decl(thisTypeAccessibility.ts, 16, 17)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) + + this.ppp = p; +>this.ppp : Symbol(MyGenericClass.ppp, Decl(thisTypeAccessibility.ts, 17, 20)) +>this : Symbol(this, Decl(thisTypeAccessibility.ts, 53, 38)) +>ppp : Symbol(MyGenericClass.ppp, Decl(thisTypeAccessibility.ts, 17, 20)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) + + MyGenericClass.sp = p; +>MyGenericClass.sp : Symbol(MyGenericClass.sp, Decl(thisTypeAccessibility.ts, 18, 18)) +>MyGenericClass : Symbol(MyGenericClass, Decl(thisTypeAccessibility.ts, 13, 1)) +>sp : Symbol(MyGenericClass.sp, Decl(thisTypeAccessibility.ts, 18, 18)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) + + MyGenericClass.spp = p; +>MyGenericClass.spp : Symbol(MyGenericClass.spp, Decl(thisTypeAccessibility.ts, 19, 30)) +>MyGenericClass : Symbol(MyGenericClass, Decl(thisTypeAccessibility.ts, 13, 1)) +>spp : Symbol(MyGenericClass.spp, Decl(thisTypeAccessibility.ts, 19, 30)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) + + MyGenericClass.sppp = p; +>MyGenericClass.sppp : Symbol(MyGenericClass.sppp, Decl(thisTypeAccessibility.ts, 20, 33)) +>MyGenericClass : Symbol(MyGenericClass, Decl(thisTypeAccessibility.ts, 13, 1)) +>sppp : Symbol(MyGenericClass.sppp, Decl(thisTypeAccessibility.ts, 20, 33)) +>p : Symbol(p, Decl(thisTypeAccessibility.ts, 53, 62)) +} diff --git a/tests/baselines/reference/thisTypeAccessibility.types b/tests/baselines/reference/thisTypeAccessibility.types index d1cef769eb..819150bf35 100644 --- a/tests/baselines/reference/thisTypeAccessibility.types +++ b/tests/baselines/reference/thisTypeAccessibility.types @@ -41,6 +41,28 @@ interface MyClass { >p : number } +class MyGenericClass { +>MyGenericClass : MyGenericClass + + private p: T; +>p : T + + protected pp: T; +>pp : T + + public ppp: T; +>ppp : T + + private static sp: number; +>sp : number + + protected static spp: number; +>spp : number + + public static sppp: number; +>sppp : number +} + MyClass.prototype.extension1 = function (this: MyClass, p: number) { >MyClass.prototype.extension1 = function (this: MyClass, p: number) { this.p = p; this.pp = p; this.ppp = p; MyClass.sp = p; MyClass.spp = p; MyClass.sppp = p;} : (this: MyClass, p: number) => void >MyClass.prototype.extension1 : (p: number) => void @@ -206,3 +228,51 @@ MyClass.prototype.extension3 = extension3; >extension3 : (p: number) => void >extension3 : (this: T, p: number) => void +function extension4(this: MyGenericClass, p: T) { +>extension4 : (this: MyGenericClass, p: T) => void +>this : MyGenericClass +>p : T + + this.p = p; +>this.p = p : T +>this.p : T +>this : MyGenericClass +>p : T +>p : T + + this.pp = p; +>this.pp = p : T +>this.pp : T +>this : MyGenericClass +>pp : T +>p : T + + this.ppp = p; +>this.ppp = p : T +>this.ppp : T +>this : MyGenericClass +>ppp : T +>p : T + + MyGenericClass.sp = p; +>MyGenericClass.sp = p : T +>MyGenericClass.sp : number +>MyGenericClass : typeof MyGenericClass +>sp : number +>p : T + + MyGenericClass.spp = p; +>MyGenericClass.spp = p : T +>MyGenericClass.spp : number +>MyGenericClass : typeof MyGenericClass +>spp : number +>p : T + + MyGenericClass.sppp = p; +>MyGenericClass.sppp = p : T +>MyGenericClass.sppp : number +>MyGenericClass : typeof MyGenericClass +>sppp : number +>p : T +} + diff --git a/tests/cases/conformance/types/thisType/thisTypeAccessibility.ts b/tests/cases/conformance/types/thisType/thisTypeAccessibility.ts index 6cdc9e7122..1ceb3a0606 100644 --- a/tests/cases/conformance/types/thisType/thisTypeAccessibility.ts +++ b/tests/cases/conformance/types/thisType/thisTypeAccessibility.ts @@ -13,6 +13,15 @@ interface MyClass { extension3(p: number): void; } +class MyGenericClass { + private p: T; + protected pp: T; + public ppp: T; + private static sp: number; + protected static spp: number; + public static sppp: number; +} + MyClass.prototype.extension1 = function (this: MyClass, p: number) { this.p = p; this.pp = p; @@ -41,3 +50,12 @@ function extension3 (this: T, p: number) { } MyClass.prototype.extension3 = extension3; + +function extension4(this: MyGenericClass, p: T) { + this.p = p; + this.pp = p; + this.ppp = p; + MyGenericClass.sp = p; + MyGenericClass.spp = p; + MyGenericClass.sppp = p; +}