visitParameters()

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(')');
  }