function resolveSuperParameterPropsType(node) {
    let propsParameterPosition;
    const parameters = propsUtil.getSuperTypeArguments(node);

    try {
      // Flow <=0.52 had 3 required TypedParameters of which the second one is the Props.
      // Flow >=0.53 has 2 optional TypedParameters of which the first one is the Props.
      propsParameterPosition = testFlowVersion(context, '>= 0.53.0') ? 0 : 1;
    } catch (e) {
      // In case there is no flow version defined, we can safely assume that when there are 3 Props we are dealing with version <= 0.52
      propsParameterPosition = parameters.params.length <= 2 ? 0 : 1;
    }

    let annotation = parameters.params[propsParameterPosition];
    while (annotation && (annotation.type === 'TypeAnnotation' || annotation.type === 'NullableTypeAnnotation')) {
      annotation = annotation.typeAnnotation;
    }

    if (annotation && annotation.type === 'GenericTypeAnnotation' && getInTypeScope(annotation.id.name)) {
      return getInTypeScope(annotation.id.name);
    }
    return annotation;
  }
Resolve the type annotation for a given class declaration node.

@param {ASTNode} node The annotation or a node containing the type annotation.
@returns {ASTNode} The resolved type annotation for the node.