From 84ebe228543c0969baf09b1007d3bc9d5bb65e0c Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Wed, 6 Nov 2019 21:43:48 +0100 Subject: [PATCH 1/2] strip QuestionToken from MethodDeclartion emit Fixes: #34953 --- src/compiler/binder.ts | 5 +++-- tests/baselines/reference/optionalMethod.js | 10 ++++++++++ .../propertyMemberDeclarations/optionalMethod.ts | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/optionalMethod.js create mode 100644 tests/cases/conformance/classes/propertyMemberDeclarations/optionalMethod.ts diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 992f8596d08fe..3372512e0bca1 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -3595,7 +3595,8 @@ namespace ts { || hasModifier(node, ModifierFlags.TypeScriptModifier) || node.typeParameters || node.type - || !node.body) { + || !node.body + || node.questionToken) { transformFlags |= TransformFlags.AssertTypeScript; } @@ -3642,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) { + if (some(node.decorators) || hasModifier(node, ModifierFlags.TypeScriptModifier) || node.type || node.questionToken) { transformFlags |= TransformFlags.AssertTypeScript; } diff --git a/tests/baselines/reference/optionalMethod.js b/tests/baselines/reference/optionalMethod.js new file mode 100644 index 0000000000000..41680ce7261f9 --- /dev/null +++ b/tests/baselines/reference/optionalMethod.js @@ -0,0 +1,10 @@ +//// [optionalMethod.ts] +class Base { + method?() { } +} + + +//// [optionalMethod.js] +class Base { + method() { } +} diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/optionalMethod.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/optionalMethod.ts new file mode 100644 index 0000000000000..39ea6df3bd5dc --- /dev/null +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/optionalMethod.ts @@ -0,0 +1,5 @@ +// @target: esnext +// @noTypesAndSymbols: true +class Base { + method?() { } +} From 526907148319af7a3b4d5b93b88ee25f2455e2da Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Thu, 7 Nov 2019 08:12:55 +0100 Subject: [PATCH 2/2] test property emit --- tests/baselines/reference/optionalProperty.js | 10 ++++++++++ .../propertyMemberDeclarations/optionalProperty.ts | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/baselines/reference/optionalProperty.js create mode 100644 tests/cases/conformance/classes/propertyMemberDeclarations/optionalProperty.ts diff --git a/tests/baselines/reference/optionalProperty.js b/tests/baselines/reference/optionalProperty.js new file mode 100644 index 0000000000000..d7c37f64914ee --- /dev/null +++ b/tests/baselines/reference/optionalProperty.js @@ -0,0 +1,10 @@ +//// [optionalProperty.ts] +class C { + prop?; +} + + +//// [optionalProperty.js] +class C { + prop; +} diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/optionalProperty.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/optionalProperty.ts new file mode 100644 index 0000000000000..cb563eedf1867 --- /dev/null +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/optionalProperty.ts @@ -0,0 +1,6 @@ +// @target: esnext +// @useDefineForClassFields: true +// @noTypesAndSymbols: true +class C { + prop?; +}