Skip to content

Commit cfa367d

Browse files
authored
Have definite assignment assertions on property signatures mark them as typescript (#35270)
1 parent 9b78599 commit cfa367d

6 files changed

+38
-1
lines changed

src/compiler/binder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3643,7 +3643,7 @@ namespace ts {
36433643
let transformFlags = subtreeFlags | TransformFlags.ContainsClassFields;
36443644

36453645
// Decorators, TypeScript-specific modifiers, and type annotations are TypeScript syntax.
3646-
if (some(node.decorators) || hasModifier(node, ModifierFlags.TypeScriptModifier) || node.type || node.questionToken) {
3646+
if (some(node.decorators) || hasModifier(node, ModifierFlags.TypeScriptModifier) || node.type || node.questionToken || node.exclamationToken) {
36473647
transformFlags |= TransformFlags.AssertTypeScript;
36483648
}
36493649

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts(2,6): error TS1255: A definite assignment assertion '!' is not permitted in this context.
2+
3+
4+
==== tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts (1 errors) ====
5+
class C {
6+
p!;
7+
~
8+
!!! error TS1255: A definite assignment assertion '!' is not permitted in this context.
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [definiteAssignmentWithErrorStillStripped.ts]
2+
class C {
3+
p!;
4+
}
5+
6+
//// [definiteAssignmentWithErrorStillStripped.js]
7+
class C {
8+
p;
9+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
=== tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts ===
2+
class C {
3+
>C : Symbol(C, Decl(definiteAssignmentWithErrorStillStripped.ts, 0, 0))
4+
5+
p!;
6+
>p : Symbol(C.p, Decl(definiteAssignmentWithErrorStillStripped.ts, 0, 9))
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
=== tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts ===
2+
class C {
3+
>C : C
4+
5+
p!;
6+
>p : any
7+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// @target: esnext
2+
// @useDefineForClassFields: true
3+
class C {
4+
p!;
5+
}

0 commit comments

Comments
 (0)