in src/utils/getTSType.ts [339:373]
function handleTSTypeOperator(
path: NodePath,
_typeParams: TypeParameters | null,
importer: Importer,
): TypeDescriptor<TSFunctionSignatureType> | null {
if (path.node.operator !== 'keyof') {
return null;
}
let value = path.get('typeAnnotation');
if (t.TSTypeQuery.check(value.node)) {
value = value.get('exprName');
} else if (value.node.id) {
value = value.get('id');
}
const resolvedPath = resolveToValue(value, importer);
if (
resolvedPath &&
(t.ObjectExpression.check(resolvedPath.node) ||
t.TSTypeLiteral.check(resolvedPath.node))
) {
const keys = resolveObjectToNameArray(resolvedPath, importer, true);
if (keys) {
return {
name: 'union',
raw: printValue(path),
elements: keys.map(key => ({ name: 'literal', value: key })),
};
}
}
return null;
}