babel-plugin-typescript-to-proptypes
Version:
Generate React PropTypes from TypeScript prop interfaces.
26 lines (20 loc) • 632 B
text/typescript
import { types as t } from '@babel/core';
import { getTypeName } from './getTypeName';
export function extractGenericTypeNames(node: t.Node): string[] {
const names: string[] = [];
// <Foo>
if (t.isTSTypeParameterInstantiation(node)) {
node.params.forEach((param) => {
names.push(...extractGenericTypeNames(param));
});
// Foo
} else if (t.isTSTypeReference(node)) {
names.push(getTypeName(node.typeName));
// Foo & Bar, Foo | Bar
} else if (t.isTSIntersectionType(node) || t.isTSUnionType(node)) {
node.types.forEach((param) => {
names.push(...extractGenericTypeNames(param));
});
}
return names;
}