diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index ed3ed36e79a..e994d78ed9e 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -314,13 +314,14 @@ namespace ts { return node; } - export function updateProperty(node: PropertyDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: PropertyName, type: TypeNode | undefined, initializer: Expression | undefined) { + export function updateProperty(node: PropertyDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name + || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer - ? updateNode(createProperty(decorators, modifiers, name, node.questionToken, type, initializer), node) + ? updateNode(createProperty(decorators, modifiers, name, questionToken, type, initializer), node) : node; } @@ -360,6 +361,7 @@ namespace ts { || node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name + || node.questionToken !== questionToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 7a476c098cf..4dbfbf72e9f 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -270,6 +270,7 @@ namespace ts { nodesVisitor((node).decorators, visitor, isDecorator), nodesVisitor((node).modifiers, visitor, isModifier), visitNode((node).name, visitor, isPropertyName), + visitNode((node).questionToken, tokenVisitor, isToken), visitNode((node).type, visitor, isTypeNode), visitNode((node).initializer, visitor, isExpression)); diff --git a/tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts b/tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts new file mode 100644 index 00000000000..96d8defbcc7 --- /dev/null +++ b/tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts @@ -0,0 +1,13 @@ +/// + +//// interface IPerson { +//// name: string; +//// birthday?: string; +//// } +//// +//// class Person implements IPerson {[| |]} + +verify.rangeAfterCodeFix(` + name: string; + birthday?: string; +`); \ No newline at end of file