function buildTypeAnnotationDeclarationTypes(annotation, parentName, seen) {
    if (typeof seen === 'undefined') {
      // Keeps track of annotations we've already seen to
      // prevent problems with recursive types.
      seen = new Set();
    }
    if (seen.has(annotation)) {
      // This must be a recursive type annotation, so just accept anything.
      return {};
    }
    seen.add(annotation);

    if (annotation.type in typeDeclarationBuilders) {
      return typeDeclarationBuilders[annotation.type](annotation, parentName, seen);
    }
    return {};
  }
Creates the representation of the React props type annotation for the component.
The representation is used to verify nested used properties.
@param {ASTNode} annotation Type annotation for the props class property.
@param {string} parentName
@param {Set<ASTNode>} [seen]
@return {Object} The representation of the declaration, empty object means
   the property is declared without the need for further analysis.