react-docgen-typescript
![Build Status](https://travis-ci.org/styleguidist/react-docgen-typescript.svg)
![](https://nodei.co/npm/react-docgen-typescript.png?downloadRank=true&downloads=true)
A simple parser for React properties defined in TypeScript instead of propTypes.
It can be used with React Styleguidist.
Installation
npm install --save-dev react-docgen-typescript
React Styleguidist integration
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
parserOptions
-
propFilter:
{
skipPropsWithName?: string[] | string;
skipPropsWithoutDoc?: boolean;
}
or
(props: PropItem, component: Component) => boolean
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.
Example
In the example folder you can see React Styleguidist integration.
The component Column.tsx
import * as React from 'react';
import { Component } from 'react';
export interface IColumnProps {
prop1?: string;
prop2: number;
prop3: () => void;
prop4: 'option1' | 'option2' | 'option3';
}
export class Column extends Component<IColumnProps, {}> {
render() {
return <div>Test</div>;
}
}
Will generate the following stylesheet:
![Stylesheet example Stylesheet example](https://github.com/styleguidist/react-docgen-typescript/raw/master/stylesheet-example-column.png)
The functional component Grid.tsx
import * as React from 'react';
export interface IGridProps {
prop1?: string;
prop2: number;
prop3: () => void;
prop4: 'option1' | 'option2' | 'option3';
}
export const Grid = (props: IGridProps) => {
const smaller = () => {return;};
return <div>Grid</div>;
};
Will generate the following stylesheet:
![Stylesheet example Stylesheet example](https://github.com/styleguidist/react-docgen-typescript/raw/master/stylesheet-example-grid.png)
Contributions
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!
Thanks to others
The integration with React Styleguidist wouldn't be possible without Vyacheslav Slinko pull request #118 at React Styleguidist.