code: private Node parseParamTypeExpression(JsDocToken token) {
      boolean restArg = false;
      if (token == JsDocToken.ELLIPSIS) {
        token = next();
        if (token == JsDocToken.RIGHT_CURLY) {
          restoreLookAhead(token);
          // EMPTY represents the UNKNOWN type in the Type AST.
          return wrapNode(Token.ELLIPSIS, IR.empty());
        }
        restArg = true;
      }
  
      Node typeNode = parseTopLevelTypeExpression(token);
      if (typeNode != null) {
        skipEOLs();
        if (restArg) {
          typeNode = wrapNode(Token.ELLIPSIS, typeNode);
        } else if (match(JsDocToken.EQUALS)) {
          next();
          skipEOLs();
          typeNode = wrapNode(Token.EQUALS, typeNode);
        }
      }
  
      return typeNode;
    }
docs: Parse a ParamTypeExpression:
  
  <pre>
  ParamTypeExpression :=
  OptionalParameterType |
  TopLevelTypeExpression |
  '...' TopLevelTypeExpression
  
  OptionalParameterType :=
  TopLevelTypeExpression '='
  </pre>