Skip to content

Commit 2342d77

Browse files
authored
Obtain target type before calling getBaseTypes (#1409)
1 parent eb83c1c commit 2342d77

File tree

4 files changed

+67
-1
lines changed

4 files changed

+67
-1
lines changed

internal/checker/checker.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8349,7 +8349,7 @@ func (c *Checker) isConstructorAccessible(node *ast.Node, signature *Signature)
83498349
}
83508350

83518351
func (c *Checker) typeHasProtectedAccessibleBase(target *ast.Symbol, t *Type) bool {
8352-
baseTypes := c.getBaseTypes(t)
8352+
baseTypes := c.getBaseTypes(c.getTargetType(t))
83538353
if len(baseTypes) == 0 {
83548354
return false
83558355
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//// [tests/cases/compiler/protectedAccessibilityCheck.ts] ////
2+
3+
=== protectedAccessibilityCheck.ts ===
4+
class C {
5+
>C : Symbol(C, Decl(protectedAccessibilityCheck.ts, 0, 0))
6+
7+
protected constructor() {}
8+
}
9+
10+
class B<T = any> extends C {}
11+
>B : Symbol(B, Decl(protectedAccessibilityCheck.ts, 2, 1))
12+
>T : Symbol(T, Decl(protectedAccessibilityCheck.ts, 4, 8))
13+
>C : Symbol(C, Decl(protectedAccessibilityCheck.ts, 0, 0))
14+
15+
class A extends B {
16+
>A : Symbol(A, Decl(protectedAccessibilityCheck.ts, 4, 29))
17+
>B : Symbol(B, Decl(protectedAccessibilityCheck.ts, 2, 1))
18+
19+
f() {
20+
>f : Symbol(f, Decl(protectedAccessibilityCheck.ts, 6, 19))
21+
22+
new A();
23+
>A : Symbol(A, Decl(protectedAccessibilityCheck.ts, 4, 29))
24+
}
25+
}
26+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//// [tests/cases/compiler/protectedAccessibilityCheck.ts] ////
2+
3+
=== protectedAccessibilityCheck.ts ===
4+
class C {
5+
>C : C
6+
7+
protected constructor() {}
8+
}
9+
10+
class B<T = any> extends C {}
11+
>B : B<T>
12+
>C : C
13+
14+
class A extends B {
15+
>A : A
16+
>B : B<any>
17+
18+
f() {
19+
>f : () => void
20+
21+
new A();
22+
>new A() : A
23+
>A : typeof A
24+
}
25+
}
26+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
class C {
5+
protected constructor() {}
6+
}
7+
8+
class B<T = any> extends C {}
9+
10+
class A extends B {
11+
f() {
12+
new A();
13+
}
14+
}

0 commit comments

Comments
 (0)