strip QuestionToken from MethodDeclaration and PropertyDeclaration emit (#34954)

* strip QuestionToken from MethodDeclartion emit

Fixes: #34953

* test property emit
This commit is contained in:
Klaus Meinhardt 2019-11-12 19:30:46 +01:00 committed by Nathan Shively-Sanders
parent 5c951635e5
commit 94f85901d7
5 changed files with 34 additions and 2 deletions

View File

@ -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;
}

View File

@ -0,0 +1,10 @@
//// [optionalMethod.ts]
class Base {
method?() { }
}
//// [optionalMethod.js]
class Base {
method() { }
}

View File

@ -0,0 +1,10 @@
//// [optionalProperty.ts]
class C {
prop?;
}
//// [optionalProperty.js]
class C {
prop;
}

View File

@ -0,0 +1,5 @@
// @target: esnext
// @noTypesAndSymbols: true
class Base {
method?() { }
}

View File

@ -0,0 +1,6 @@
// @target: esnext
// @useDefineForClassFields: true
// @noTypesAndSymbols: true
class C {
prop?;
}