Skip to content

Commit 49638ab

Browse files
ikatyangmhegazy
authored andcommitted
Add missing questionToken in emitMethod/PropertyDeclaration (#16020)
1 parent 1c3cdf1 commit 49638ab

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

src/compiler/emitter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,7 @@ namespace ts {
860860
emitDecorators(node, node.decorators);
861861
emitModifiers(node, node.modifiers);
862862
emit(node.name);
863+
writeIfPresent(node.questionToken, "?");
863864
emitWithPrefix(": ", node.type);
864865
emitExpressionWithPrefix(" = ", node.initializer);
865866
write(";");
@@ -881,6 +882,7 @@ namespace ts {
881882
emitModifiers(node, node.modifiers);
882883
writeIfPresent(node.asteriskToken, "*");
883884
emit(node.name);
885+
writeIfPresent(node.questionToken, "?");
884886
emitSignatureAndBody(node, emitSignatureHead);
885887
}
886888

src/harness/unittests/printer.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,40 @@ namespace ts {
9898
)
9999
])
100100
);
101+
102+
// https://github.com/Microsoft/TypeScript/issues/15971
103+
const classWithOptionalMethodAndProperty = createClassDeclaration(
104+
undefined,
105+
/* modifiers */ createNodeArray([createToken(SyntaxKind.DeclareKeyword)]),
106+
/* name */ createIdentifier("X"),
107+
undefined,
108+
undefined,
109+
createNodeArray([
110+
createMethod(
111+
undefined,
112+
undefined,
113+
undefined,
114+
/* name */ createIdentifier("method"),
115+
/* questionToken */ createToken(SyntaxKind.QuestionToken),
116+
undefined,
117+
undefined,
118+
/* type */ createKeywordTypeNode(SyntaxKind.VoidKeyword),
119+
undefined
120+
),
121+
createProperty(
122+
undefined,
123+
undefined,
124+
/* name */ createIdentifier("property"),
125+
/* questionToken */ createToken(SyntaxKind.QuestionToken),
126+
/* type */ createKeywordTypeNode(SyntaxKind.StringKeyword),
127+
undefined
128+
),
129+
])
130+
);
131+
101132
// tslint:enable boolean-trivia
102133
printsCorrectly("class", {}, printer => printer.printNode(EmitHint.Unspecified, syntheticNode, sourceFile));
134+
printsCorrectly("classWithOptionalMethodAndProperty", {}, printer => printer.printNode(EmitHint.Unspecified, classWithOptionalMethodAndProperty, sourceFile));
103135
});
104136
});
105137
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
declare class X {
2+
method?(): void;
3+
property?: string;
4+
}

0 commit comments

Comments
 (0)