docs: function buildParam(key: string, value: any, traditional?: boolean): Array<string> {
    let result = [];
    if (value === null || value === undefined) {
      return result;
    }
    if (Array.isArray(value)) {
      for (let i = 0, l = value.length; i < l; i++) {
        if (traditional) {
          result.push(`${encodeKey(key)}=${encode(value[i])}`);
        } else {
          let arrayKey = key + '[' + (typeof value[i] === 'object' && value[i] !== null ? i : '') + ']';
          result = result.concat(buildParam(arrayKey, value[i]));
        }
      }
    } else if (typeof (value) === 'object' && !traditional) {
      for (let propertyName in value) {
        result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));
      }
    } else {
      result.push(`${encodeKey(key) }=${encode(value) }`);
    }
    return result;
  }