in lib/base.ts [584:616]
visitParameters(parameters: ts.NodeArray<ts.ParameterDeclaration>, {namesOnly = false}) {
this.emitNoSpace('(');
let firstInitParamIdx = 0;
for (; firstInitParamIdx < parameters.length; firstInitParamIdx++) {
// ObjectBindingPatterns are handled within the parameter visit.
let isOpt = parameters[firstInitParamIdx].initializer ||
parameters[firstInitParamIdx].questionToken ||
parameters[firstInitParamIdx].dotDotDotToken;
if (isOpt && !ts.isObjectBindingPattern(parameters[firstInitParamIdx].name)) {
break;
}
}
let hasValidParameters = false;
if (firstInitParamIdx !== 0) {
let requiredParams = parameters.slice(0, firstInitParamIdx);
hasValidParameters = this.visitParameterList(requiredParams, namesOnly);
}
if (firstInitParamIdx !== parameters.length) {
if (hasValidParameters) this.emitNoSpace(',');
let positionalOptional = parameters.slice(firstInitParamIdx, parameters.length);
if (!namesOnly) {
this.emit('[');
}
this.visitParameterList(positionalOptional, namesOnly);
if (!namesOnly) {
this.emitNoSpace(']');
}
}
this.emitNoSpace(')');
}