From cfa367d7f9dfc36149ad5ad7a0ce8ab91e323e8c Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 21 Nov 2019 13:13:46 -0800 Subject: [PATCH] Have definite assignment assertions on property signatures mark them as typescript (#35270) --- src/compiler/binder.ts | 2 +- .../definiteAssignmentWithErrorStillStripped.errors.txt | 9 +++++++++ .../definiteAssignmentWithErrorStillStripped.js | 9 +++++++++ .../definiteAssignmentWithErrorStillStripped.symbols | 7 +++++++ .../definiteAssignmentWithErrorStillStripped.types | 7 +++++++ .../compiler/definiteAssignmentWithErrorStillStripped.ts | 5 +++++ 6 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/definiteAssignmentWithErrorStillStripped.errors.txt create mode 100644 tests/baselines/reference/definiteAssignmentWithErrorStillStripped.js create mode 100644 tests/baselines/reference/definiteAssignmentWithErrorStillStripped.symbols create mode 100644 tests/baselines/reference/definiteAssignmentWithErrorStillStripped.types create mode 100644 tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index a6c576e3a4..e09fa73e3c 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -3643,7 +3643,7 @@ namespace ts { let transformFlags = subtreeFlags | TransformFlags.ContainsClassFields; // Decorators, TypeScript-specific modifiers, and type annotations are TypeScript syntax. - if (some(node.decorators) || hasModifier(node, ModifierFlags.TypeScriptModifier) || node.type || node.questionToken) { + if (some(node.decorators) || hasModifier(node, ModifierFlags.TypeScriptModifier) || node.type || node.questionToken || node.exclamationToken) { transformFlags |= TransformFlags.AssertTypeScript; } diff --git a/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.errors.txt b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.errors.txt new file mode 100644 index 0000000000..d6625904b2 --- /dev/null +++ b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts(2,6): error TS1255: A definite assignment assertion '!' is not permitted in this context. + + +==== tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts (1 errors) ==== + class C { + p!; + ~ +!!! error TS1255: A definite assignment assertion '!' is not permitted in this context. + } \ No newline at end of file diff --git a/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.js b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.js new file mode 100644 index 0000000000..2c397b83d8 --- /dev/null +++ b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.js @@ -0,0 +1,9 @@ +//// [definiteAssignmentWithErrorStillStripped.ts] +class C { + p!; +} + +//// [definiteAssignmentWithErrorStillStripped.js] +class C { + p; +} diff --git a/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.symbols b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.symbols new file mode 100644 index 0000000000..63a6f56b36 --- /dev/null +++ b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.symbols @@ -0,0 +1,7 @@ +=== tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts === +class C { +>C : Symbol(C, Decl(definiteAssignmentWithErrorStillStripped.ts, 0, 0)) + + p!; +>p : Symbol(C.p, Decl(definiteAssignmentWithErrorStillStripped.ts, 0, 9)) +} diff --git a/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.types b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.types new file mode 100644 index 0000000000..9cdd939ec3 --- /dev/null +++ b/tests/baselines/reference/definiteAssignmentWithErrorStillStripped.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts === +class C { +>C : C + + p!; +>p : any +} diff --git a/tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts b/tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts new file mode 100644 index 0000000000..4f7f594363 --- /dev/null +++ b/tests/cases/compiler/definiteAssignmentWithErrorStillStripped.ts @@ -0,0 +1,5 @@ +// @target: esnext +// @useDefineForClassFields: true +class C { + p!; +} \ No newline at end of file