in src/utils/getFlowType.ts [124:213]
raw: printValue(id),
};
} else {
type = { name: printValue(id).replace(/<.*>$/, '') };
}
} else {
type = { name: path.node.id.name };
}
const resolvedPath =
(typeParams && typeParams[type.name]) ||
resolveToValue(path.get('id'), importer);
if (path.node.typeParameters && resolvedPath.node.typeParameters) {
typeParams = getTypeParameters(
resolvedPath.get('typeParameters'),
path.get('typeParameters'),
typeParams,
importer,
);
}
if (
typeParams &&
typeParams[type.name] &&
// @ts-ignore
typeParams[type.name].value.type === t.GenericTypeAnnotation.name
) {
return type;
}
if (typeParams && typeParams[type.name]) {
type = getFlowTypeWithResolvedTypes(resolvedPath, typeParams, importer);
}
if (resolvedPath && resolvedPath.node.right) {
type = getFlowTypeWithResolvedTypes(
resolvedPath.get('right'),
typeParams,
importer,
);
} else if (path.node.typeParameters) {
const params = path.get('typeParameters').get('params');
type = {
...(type as SimpleType),
elements: params.map((param: NodePath) =>
getFlowTypeWithResolvedTypes(param, typeParams, importer),
),
raw: printValue(path),
};
}
return type;
}
function handleObjectTypeAnnotation(
path: NodePath,
typeParams: TypeParameters | null,
importer: Importer,
): TypeDescriptor {
const type: ObjectSignatureType = {
name: 'signature',
type: 'object',
raw: printValue(path),
signature: { properties: [] },
};
path.get('callProperties').each(param => {
type.signature.constructor = getFlowTypeWithResolvedTypes(
param.get('value'),
typeParams,
importer,
);
});
path.get('indexers').each(param => {
type.signature.properties.push({
key: getFlowTypeWithResolvedTypes(param.get('key'), typeParams, importer),
value: getFlowTypeWithRequirements(
param.get('value'),
typeParams,
importer,
),
});
});
path.get('properties').each(param => {
if (t.ObjectTypeProperty.check(param.node)) {
type.signature.properties.push({