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/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/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?() { } +} 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?; +}