diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9d436870297..5da2abe3699 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3142,12 +3142,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { return; } - if (isBindingPattern(parameter.name)) { - writeLine(); - write("var "); - emitDestructuring(parameter, /*isAssignmentExpressionStatement*/ false, tempParameters[tempIndex]); - write(";"); - tempIndex++; + let paramName = parameter.name; + if (isBindingPattern(paramName)) { + // In cases where a binding patternm is simply '[]' or '{}', + // we don't want to emit anything. + if (paramName.elements.length > 0) { + writeLine(); + write("var "); + emitDestructuring(parameter, /*isAssignmentExpressionStatement*/ false, tempParameters[tempIndex]); + write(";"); + tempIndex++; + } } else if (parameter.initializer) { writeLine(); diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index ee75454ad93..72478a2fa26 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1067,7 +1067,7 @@ namespace ts { return SyntaxKind.FirstTemplateToken <= kind && kind <= SyntaxKind.LastTemplateToken; } - export function isBindingPattern(node: Node) { + export function isBindingPattern(node: Node): node is BindingPattern { return !!node && (node.kind === SyntaxKind.ArrayBindingPattern || node.kind === SyntaxKind.ObjectBindingPattern); }