in src/utils/getTSType.ts [135:187]
function handleTSTypeLiteral(
path: NodePath,
typeParams: TypeParameters | null,
importer: Importer,
): ObjectSignatureType<TSFunctionSignatureType> {
const type: ObjectSignatureType<TSFunctionSignatureType> = {
name: 'signature',
type: 'object',
raw: printValue(path),
signature: { properties: [] },
};
path.get('members').each(param => {
if (
t.TSPropertySignature.check(param.node) ||
t.TSMethodSignature.check(param.node)
) {
const propName = getPropertyName(param, importer);
if (!propName) {
return;
}
type.signature.properties.push({
key: propName,
value: getTSTypeWithRequirements(
param.get('typeAnnotation'),
typeParams,
importer,
),
});
} else if (t.TSCallSignatureDeclaration.check(param.node)) {
type.signature.constructor = handleTSFunctionType(
param,
typeParams,
importer,
);
} else if (t.TSIndexSignature.check(param.node)) {
type.signature.properties.push({
key: getTSTypeWithResolvedTypes(
param.get('parameters').get(0).get('typeAnnotation'),
typeParams,
importer,
),
value: getTSTypeWithRequirements(
param.get('typeAnnotation'),
typeParams,
importer,
),
});
}
});
return type;
}