diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f9be81446f..57129829ad 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -5252,10 +5252,15 @@ namespace ts { return parseIdentifier(); } - function parseVariableDeclaration(): VariableDeclaration { + function parseVariableDeclarationAllowExclamation() { + return parseVariableDeclaration(/*allowExclamation*/ true); + } + + function parseVariableDeclaration(allowExclamation?: boolean): VariableDeclaration { const node = createNode(SyntaxKind.VariableDeclaration); node.name = parseIdentifierOrPattern(); - if (node.name.kind === SyntaxKind.Identifier && token() === SyntaxKind.ExclamationToken && !scanner.hasPrecedingLineBreak()) { + if (allowExclamation && node.name.kind === SyntaxKind.Identifier && + token() === SyntaxKind.ExclamationToken && !scanner.hasPrecedingLineBreak()) { node.exclamationToken = parseTokenNode(); } node.type = parseTypeAnnotation(); @@ -5299,7 +5304,8 @@ namespace ts { const savedDisallowIn = inDisallowInContext(); setDisallowInContext(inForStatementInitializer); - node.declarations = parseDelimitedList(ParsingContext.VariableDeclarations, parseVariableDeclaration); + node.declarations = parseDelimitedList(ParsingContext.VariableDeclarations, + inForStatementInitializer ? parseVariableDeclaration : parseVariableDeclarationAllowExclamation); setDisallowInContext(savedDisallowIn); }