Skip to content

Commit 4f7fe4a

Browse files
TypeScript Bota-tarasyuk
TypeScript Bot
andauthored
Cherry-pick PR #44290 into release-4.3 (#44425)
Component commits: f3bf29a fix(44273): preserves 'override' modifier in JavaScript output Co-authored-by: Oleksandr T <oleksandr.tarasiuk@outlook.com>
1 parent e425f57 commit 4f7fe4a

25 files changed

+574
-0
lines changed

src/compiler/transformers/ts.ts

+1
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ namespace ts {
368368
case SyntaxKind.PrivateKeyword:
369369
case SyntaxKind.ProtectedKeyword:
370370
case SyntaxKind.AbstractKeyword:
371+
case SyntaxKind.OverrideKeyword:
371372
case SyntaxKind.ConstKeyword:
372373
case SyntaxKind.DeclareKeyword:
373374
case SyntaxKind.ReadonlyKeyword:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//// [override16.ts]
2+
class A {
3+
foo?: string;
4+
}
5+
6+
class B extends A {
7+
override foo = "string";
8+
}
9+
10+
11+
//// [override16.js]
12+
class A {
13+
}
14+
class B extends A {
15+
constructor() {
16+
super(...arguments);
17+
this.foo = "string";
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/conformance/override/override16.ts ===
2+
class A {
3+
>A : Symbol(A, Decl(override16.ts, 0, 0))
4+
5+
foo?: string;
6+
>foo : Symbol(A.foo, Decl(override16.ts, 0, 9))
7+
}
8+
9+
class B extends A {
10+
>B : Symbol(B, Decl(override16.ts, 2, 1))
11+
>A : Symbol(A, Decl(override16.ts, 0, 0))
12+
13+
override foo = "string";
14+
>foo : Symbol(B.foo, Decl(override16.ts, 4, 19))
15+
}
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/override/override16.ts ===
2+
class A {
3+
>A : A
4+
5+
foo?: string;
6+
>foo : string
7+
}
8+
9+
class B extends A {
10+
>B : B
11+
>A : A
12+
13+
override foo = "string";
14+
>foo : string
15+
>"string" : "string"
16+
}
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//// [override16.ts]
2+
class A {
3+
foo?: string;
4+
}
5+
6+
class B extends A {
7+
override foo = "string";
8+
}
9+
10+
11+
//// [override16.js]
12+
class A {
13+
foo;
14+
}
15+
class B extends A {
16+
foo = "string";
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/conformance/override/override16.ts ===
2+
class A {
3+
>A : Symbol(A, Decl(override16.ts, 0, 0))
4+
5+
foo?: string;
6+
>foo : Symbol(A.foo, Decl(override16.ts, 0, 9))
7+
}
8+
9+
class B extends A {
10+
>B : Symbol(B, Decl(override16.ts, 2, 1))
11+
>A : Symbol(A, Decl(override16.ts, 0, 0))
12+
13+
override foo = "string";
14+
>foo : Symbol(B.foo, Decl(override16.ts, 4, 19))
15+
}
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/override/override16.ts ===
2+
class A {
3+
>A : A
4+
5+
foo?: string;
6+
>foo : string
7+
}
8+
9+
class B extends A {
10+
>B : B
11+
>A : A
12+
13+
override foo = "string";
14+
>foo : string
15+
>"string" : "string"
16+
}
17+
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//// [override16.ts]
2+
class A {
3+
foo?: string;
4+
}
5+
6+
class B extends A {
7+
override foo = "string";
8+
}
9+
10+
11+
//// [override16.js]
12+
class A {
13+
foo;
14+
}
15+
class B extends A {
16+
foo = "string";
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/conformance/override/override16.ts ===
2+
class A {
3+
>A : Symbol(A, Decl(override16.ts, 0, 0))
4+
5+
foo?: string;
6+
>foo : Symbol(A.foo, Decl(override16.ts, 0, 9))
7+
}
8+
9+
class B extends A {
10+
>B : Symbol(B, Decl(override16.ts, 2, 1))
11+
>A : Symbol(A, Decl(override16.ts, 0, 0))
12+
13+
override foo = "string";
14+
>foo : Symbol(B.foo, Decl(override16.ts, 4, 19))
15+
}
16+
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/override/override16.ts ===
2+
class A {
3+
>A : A
4+
5+
foo?: string;
6+
>foo : string
7+
}
8+
9+
class B extends A {
10+
>B : B
11+
>A : A
12+
13+
override foo = "string";
14+
>foo : string
15+
>"string" : "string"
16+
}
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//// [override17.ts]
2+
class A {
3+
public m1(): number {
4+
return 0;
5+
}
6+
7+
public m2(): number {
8+
return 0;
9+
}
10+
11+
public m3(): void {}
12+
}
13+
14+
class B extends A {
15+
override m1() {
16+
return 10;
17+
}
18+
19+
override m2(): number {
20+
return 30;
21+
}
22+
23+
override m3(): void {}
24+
}
25+
26+
27+
//// [override17.js]
28+
class A {
29+
m1() {
30+
return 0;
31+
}
32+
m2() {
33+
return 0;
34+
}
35+
m3() { }
36+
}
37+
class B extends A {
38+
m1() {
39+
return 10;
40+
}
41+
m2() {
42+
return 30;
43+
}
44+
m3() { }
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
=== tests/cases/conformance/override/override17.ts ===
2+
class A {
3+
>A : Symbol(A, Decl(override17.ts, 0, 0))
4+
5+
public m1(): number {
6+
>m1 : Symbol(A.m1, Decl(override17.ts, 0, 9))
7+
8+
return 0;
9+
}
10+
11+
public m2(): number {
12+
>m2 : Symbol(A.m2, Decl(override17.ts, 3, 5))
13+
14+
return 0;
15+
}
16+
17+
public m3(): void {}
18+
>m3 : Symbol(A.m3, Decl(override17.ts, 7, 5))
19+
}
20+
21+
class B extends A {
22+
>B : Symbol(B, Decl(override17.ts, 10, 1))
23+
>A : Symbol(A, Decl(override17.ts, 0, 0))
24+
25+
override m1() {
26+
>m1 : Symbol(B.m1, Decl(override17.ts, 12, 19))
27+
28+
return 10;
29+
}
30+
31+
override m2(): number {
32+
>m2 : Symbol(B.m2, Decl(override17.ts, 15, 5))
33+
34+
return 30;
35+
}
36+
37+
override m3(): void {}
38+
>m3 : Symbol(B.m3, Decl(override17.ts, 19, 5))
39+
}
40+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
=== tests/cases/conformance/override/override17.ts ===
2+
class A {
3+
>A : A
4+
5+
public m1(): number {
6+
>m1 : () => number
7+
8+
return 0;
9+
>0 : 0
10+
}
11+
12+
public m2(): number {
13+
>m2 : () => number
14+
15+
return 0;
16+
>0 : 0
17+
}
18+
19+
public m3(): void {}
20+
>m3 : () => void
21+
}
22+
23+
class B extends A {
24+
>B : B
25+
>A : A
26+
27+
override m1() {
28+
>m1 : () => number
29+
30+
return 10;
31+
>10 : 10
32+
}
33+
34+
override m2(): number {
35+
>m2 : () => number
36+
37+
return 30;
38+
>30 : 30
39+
}
40+
41+
override m3(): void {}
42+
>m3 : () => void
43+
}
44+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//// [override17.ts]
2+
class A {
3+
public m1(): number {
4+
return 0;
5+
}
6+
7+
public m2(): number {
8+
return 0;
9+
}
10+
11+
public m3(): void {}
12+
}
13+
14+
class B extends A {
15+
override m1() {
16+
return 10;
17+
}
18+
19+
override m2(): number {
20+
return 30;
21+
}
22+
23+
override m3(): void {}
24+
}
25+
26+
27+
//// [override17.js]
28+
class A {
29+
m1() {
30+
return 0;
31+
}
32+
m2() {
33+
return 0;
34+
}
35+
m3() { }
36+
}
37+
class B extends A {
38+
m1() {
39+
return 10;
40+
}
41+
m2() {
42+
return 30;
43+
}
44+
m3() { }
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
=== tests/cases/conformance/override/override17.ts ===
2+
class A {
3+
>A : Symbol(A, Decl(override17.ts, 0, 0))
4+
5+
public m1(): number {
6+
>m1 : Symbol(A.m1, Decl(override17.ts, 0, 9))
7+
8+
return 0;
9+
}
10+
11+
public m2(): number {
12+
>m2 : Symbol(A.m2, Decl(override17.ts, 3, 5))
13+
14+
return 0;
15+
}
16+
17+
public m3(): void {}
18+
>m3 : Symbol(A.m3, Decl(override17.ts, 7, 5))
19+
}
20+
21+
class B extends A {
22+
>B : Symbol(B, Decl(override17.ts, 10, 1))
23+
>A : Symbol(A, Decl(override17.ts, 0, 0))
24+
25+
override m1() {
26+
>m1 : Symbol(B.m1, Decl(override17.ts, 12, 19))
27+
28+
return 10;
29+
}
30+
31+
override m2(): number {
32+
>m2 : Symbol(B.m2, Decl(override17.ts, 15, 5))
33+
34+
return 30;
35+
}
36+
37+
override m3(): void {}
38+
>m3 : Symbol(B.m3, Decl(override17.ts, 19, 5))
39+
}
40+

0 commit comments

Comments
 (0)