
Security News
Bun 1.2.19 Adds Isolated Installs for Better Monorepo Support
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.
react-docgen-typescript
Advanced tools
[](https://travis-ci.org/styleguidist/react-docgen-typescript)
The react-docgen-typescript package is a tool for extracting documentation from TypeScript React components. It parses TypeScript files and generates JSON output that describes the components, their props, methods, and other relevant information. This is particularly useful for creating documentation websites or integrating with other tools that require component metadata.
Extracting Prop Types
This feature allows you to extract prop types from a TypeScript React component. The `parse` function reads the component file and returns a JSON object containing detailed information about the component's props.
const docgen = require('react-docgen-typescript');
const options = { savePropValueAsString: true };
const componentInfo = docgen.parse('path/to/your/component.tsx', options);
console.log(JSON.stringify(componentInfo, null, 2));
Customizing Parser Options
This feature allows you to customize the parser options to fit your needs. For example, you can choose to extract literal values from enums or remove `undefined` from optional props.
const docgen = require('react-docgen-typescript');
const options = { shouldExtractLiteralValuesFromEnum: true, shouldRemoveUndefinedFromOptional: true };
const componentInfo = docgen.parse('path/to/your/component.tsx', options);
console.log(JSON.stringify(componentInfo, null, 2));
Generating Documentation for Multiple Files
This feature allows you to generate documentation for multiple files at once. You can pass an array of file paths to the `parse` function, and it will return a combined JSON object with information about all the components.
const docgen = require('react-docgen-typescript');
const options = { savePropValueAsString: true };
const files = ['path/to/your/component1.tsx', 'path/to/your/component2.tsx'];
const componentInfo = docgen.parse(files, options);
console.log(JSON.stringify(componentInfo, null, 2));
react-docgen is a similar tool that extracts documentation from React components, but it is designed for JavaScript rather than TypeScript. It parses the component files and generates JSON output describing the components. While it is powerful, it lacks the TypeScript-specific features of react-docgen-typescript.
typedoc is a documentation generator for TypeScript projects. It can generate HTML or JSON documentation for TypeScript code, including React components. While it is more general-purpose compared to react-docgen-typescript, it can be used to document a wider range of TypeScript code, not just React components.
ts-morph is a TypeScript compiler API wrapper that allows for easy manipulation and analysis of TypeScript code. While it is not specifically designed for generating documentation, it can be used to extract information from TypeScript code, including React components, and generate custom documentation.
A simple parser for React properties defined in TypeScript instead of propTypes.
It can be used with React Styleguidist.
npm install --save-dev react-docgen-typescript
Include following line in your styleguide.config.js
:
propsParser: require('react-docgen-typescript').withDefaultConfig([parserOptions]).parse
or if you want to use custom tsconfig file
propsParser: require('react-docgen-typescript').withCustomConfig('./tsconfig.json', [parserOptions]).parse
propFilter:
{
skipPropsWithName?: string[] | string;
skipPropsWithoutDoc?: boolean;
}
or
(props: PropItem, component: Component) => boolean
In case you do not want to print out all the HTML props, because your component is typed like this:
const MyComponent: React.FC<React.HTMLAttributes<HTMLDivElement>> = ()...
you can use this workaround inside propFilter
:
if (prop.parent) {
return !prop.parent.fileName.includes('node_modules')
}
return true
Note: children
without a doc comment will not be documented.
componentNameResolver:
(exp: ts.Symbol, source: ts.SourceFile) => string | undefined | null | false
If a string is returned, then the component will use that name. Else it will fallback to the default logic of parser.
Styled components example:
componentNameResolver: (exp, source) => exp.getName() === 'StyledComponentClass' && getDefaultExportForFile(source);
The parser exports
getDefaultExportForFile
helper through its public API.
In the example folder you can see React Styleguidist integration.
The component Column.tsx
import * as React from 'react';
import { Component } from 'react';
/**
* Column properties.
*/
export interface IColumnProps {
/** prop1 description */
prop1?: string;
/** prop2 description */
prop2: number;
/**
* prop3 description
*/
prop3: () => void;
/** prop4 description */
prop4: 'option1' | 'option2' | 'option3';
}
/**
* Form column.
*/
export class Column extends Component<IColumnProps, {}> {
render() {
return <div>Test</div>;
}
}
Will generate the following stylesheet:
The functional component Grid.tsx
import * as React from 'react';
/**
* Grid properties.
*/
export interface IGridProps {
/** prop1 description */
prop1?: string;
/** prop2 description */
prop2: number;
/**
* prop3 description
*/
prop3: () => void;
/** Working grid description */
prop4: 'option1' | 'option2' | 'option3';
}
/**
* Form Grid.
*/
export const Grid = (props: IGridProps) => {
const smaller = () => {return;};
return <div>Grid</div>;
};
Will generate the following stylesheet:
The typescript is pretty complex and there are many different ways how to define components and their props so it's realy hard to support all these use cases. That means only one thing, contributions are highly welcome. Just keep in mind that each PR should also include tests for the part it's fixing.
Thanks to all contributors without their help there wouldn't be a single bug fixed or feature implemented. Check the contributors tab to find out more. All those people supported this project. THANK YOU!
The integration with React Styleguidist wouldn't be possible without Vyacheslav Slinko pull request #118 at React Styleguidist.
FAQs
[](https://github.com/styleguidist/react-docgen-typescript/actions/workflows/nodejs.yml)
The npm package react-docgen-typescript receives a total of 5,020,650 weekly downloads. As such, react-docgen-typescript popularity was classified as popular.
We found that react-docgen-typescript demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.
Security News
Popular npm packages like eslint-config-prettier were compromised after a phishing attack stole a maintainer’s token, spreading malicious updates.
Security News
/Research
A phishing attack targeted developers using a typosquatted npm domain (npnjs.com) to steal credentials via fake login pages - watch out for similar scams.