Skip to content

Commit 68a9d45

Browse files
committed
Avoid testing isClassDeclaration if there's no valueDeclaration
I'm not sure if this is enough -- perhaps it's better to make the test dig through the interface/s to the class? Fixes 36059.
1 parent f24f363 commit 68a9d45

File tree

6 files changed

+80
-0
lines changed

6 files changed

+80
-0
lines changed

src/compiler/checker.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16130,6 +16130,7 @@ namespace ts {
1613016130
unmatchedProperty.valueDeclaration
1613116131
&& isNamedDeclaration(unmatchedProperty.valueDeclaration)
1613216132
&& isPrivateIdentifier(unmatchedProperty.valueDeclaration.name)
16133+
&& source.symbol.valueDeclaration
1613316134
&& isClassDeclaration(source.symbol.valueDeclaration)
1613416135
) {
1613516136
const privateIdentifierDescription = unmatchedProperty.valueDeclaration.name.escapedText;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
tests/cases/conformance/classes/members/privateNames/privateNamesUnique-4.ts(6,7): error TS2741: Property '#something' is missing in type 'A2' but required in type 'C'.
2+
3+
4+
==== tests/cases/conformance/classes/members/privateNames/privateNamesUnique-4.ts (1 errors) ====
5+
class A1 { }
6+
interface A2 extends A1 { }
7+
declare const a: A2;
8+
9+
class C { #something: number }
10+
const c: C = a;
11+
~
12+
!!! error TS2741: Property '#something' is missing in type 'A2' but required in type 'C'.
13+
!!! related TS2728 tests/cases/conformance/classes/members/privateNames/privateNamesUnique-4.ts:5:11: '#something' is declared here.
14+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [privateNamesUnique-4.ts]
2+
class A1 { }
3+
interface A2 extends A1 { }
4+
declare const a: A2;
5+
6+
class C { #something: number }
7+
const c: C = a;
8+
9+
10+
//// [privateNamesUnique-4.js]
11+
var _something;
12+
class A1 {
13+
}
14+
class C {
15+
constructor() {
16+
_something.set(this, void 0);
17+
}
18+
}
19+
_something = new WeakMap();
20+
const c = a;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNamesUnique-4.ts ===
2+
class A1 { }
3+
>A1 : Symbol(A1, Decl(privateNamesUnique-4.ts, 0, 0))
4+
5+
interface A2 extends A1 { }
6+
>A2 : Symbol(A2, Decl(privateNamesUnique-4.ts, 0, 12))
7+
>A1 : Symbol(A1, Decl(privateNamesUnique-4.ts, 0, 0))
8+
9+
declare const a: A2;
10+
>a : Symbol(a, Decl(privateNamesUnique-4.ts, 2, 13))
11+
>A2 : Symbol(A2, Decl(privateNamesUnique-4.ts, 0, 12))
12+
13+
class C { #something: number }
14+
>C : Symbol(C, Decl(privateNamesUnique-4.ts, 2, 20))
15+
>#something : Symbol(C.#something, Decl(privateNamesUnique-4.ts, 4, 9))
16+
17+
const c: C = a;
18+
>c : Symbol(c, Decl(privateNamesUnique-4.ts, 5, 5))
19+
>C : Symbol(C, Decl(privateNamesUnique-4.ts, 2, 20))
20+
>a : Symbol(a, Decl(privateNamesUnique-4.ts, 2, 13))
21+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/conformance/classes/members/privateNames/privateNamesUnique-4.ts ===
2+
class A1 { }
3+
>A1 : A1
4+
5+
interface A2 extends A1 { }
6+
declare const a: A2;
7+
>a : A2
8+
9+
class C { #something: number }
10+
>C : C
11+
>#something : number
12+
13+
const c: C = a;
14+
>c : C
15+
>a : A2
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @target: es2015
2+
3+
class A1 { }
4+
interface A2 extends A1 { }
5+
declare const a: A2;
6+
7+
class C { #something: number }
8+
const c: C = a;

0 commit comments

Comments
 (0)