
Security News
Packagist Urges Immediate Composer Update After GitHub Actions Token Leak
Packagist urges PHP projects to update Composer after a GitHub token format change exposed some GitHub Actions tokens in CI logs.
@jakxz/docgen-typescript
Advanced tools
[](https://github.com/jakxz/react-docgen-typescript/actions/workflows/nodejs.yml)
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
To parse a file for docgen information use the parse function.
const docgen = require("react-docgen-typescript");
const options = {
savePropValueAsString: true,
};
// Parse a file for docgen info
docgen.parse("./path/to/component", options);
If you want to customize the typescript configuration or docgen options, this package exports a variety of ways to create custom parsers.
const docgen = require("react-docgen-typescript");
// Create a parser with the default typescript config and custom docgen options
const customParser = docgen.withDefaultConfig(options);
const docs = customParser.parse("./path/to/component");
// Create a parser with the custom typescript and custom docgen options
const customCompilerOptionsParser = docgen.withCompilerOptions(
{ esModuleInterop: true },
options
);
// Create a parser with using your typescript config
const tsConfigParser = docgen.withCustomConfig("./tsconfig.json", {
savePropValueAsString: true,
});
Include following line in your styleguide.config.js:
module.exports = {
propsParser: require("react-docgen-typescript").withDefaultConfig([
parserOptions,
]).parse,
};
or if you want to use custom tsconfig file
module.exports = {
propsParser: require("react-docgen-typescript").withCustomConfig(
"./tsconfig.json",
[parserOptions]
).parse,
};
propFilterThe propFilter option allows you to omit certain props from documentation generation.
You can either provide and object with some of our pre-configured filters:
interface FilterOptions {
skipPropsWithName?: string[] | string;
skipPropsWithoutDoc?: boolean;
}
const options = {
propFilter: {
skipPropsWithName: ['as', 'id'];
skipPropsWithoutDoc: true;
}
}
If you do not want to print out all the HTML attributes of a component typed like the following:
const MyComponent: React.FC<React.HTMLAttributes<HTMLDivElement>> = ()...
you can provide a propFilter function and do the filtering logic yourself.
type PropFilter = (prop: PropItem, component: Component) => boolean;
const options = {
propFilter: (prop: PropItem, component: Component) => {
if (prop.declarations !== undefined && prop.declarations.length > 0) {
const hasPropAdditionalDescription = prop.declarations.find(
(declaration) => {
return !declaration.fileName.includes("node_modules");
}
);
return Boolean(hasPropAdditionalDescription);
}
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.
shouldExtractLiteralValuesFromEnum: booleanIf set to true, string enums and unions will be converted to docgen enum format. Useful if you use Storybook and want to generate knobs automatically using addon-smart-knobs.
shouldExtractValuesFromUnion: booleanIf set to true, every unions will be converted to docgen enum format.
skipChildrenPropWithoutDoc: boolean (default: true)If set to false the docs for the children prop will be generated even without an explicit description.
shouldRemoveUndefinedFromOptional: booleanIf set to true, types that are optional will not display " | undefined" in the type.
savePropValueAsString: booleanIf set to true, defaultValue to props will be string. Example:
Component.defaultProps = {
counter: 123,
disabled: false,
};
Will return:
counter: {
defaultValue: '123',
required: true,
type: 'number'
},
disabled: {
defaultValue: 'false',
required: true,
type: 'boolean'
}
Styled components example:
componentNameResolver: (exp, source) =>
exp.getName() === "StyledComponentClass" && getDefaultExportForFile(source);
The parser exports
getDefaultExportForFilehelper through its public API.
In the example folder you can see React Styleguidist integration.
Warning: only named exports are supported. If your project uses default exports, you still need to include named exports for react-docgen-typescript.
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:

There are many different ways to define components and their props so it's really hard to support all use cases. That means only one thing: contributions are highly welcome & encouraged. 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/jakxz/react-docgen-typescript/actions/workflows/nodejs.yml)
The npm package @jakxz/docgen-typescript receives a total of 4 weekly downloads. As such, @jakxz/docgen-typescript popularity was classified as not popular.
We found that @jakxz/docgen-typescript demonstrated a not healthy version release cadence and project activity because the last version was released 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
Packagist urges PHP projects to update Composer after a GitHub token format change exposed some GitHub Actions tokens in CI logs.

Research
GemStuffer abuses RubyGems as an exfiltration channel, packaging scraped UK council portal data into junk gems published from new accounts.

Company News
Socket was named to the Rising in Cyber 2026 list, recognizing 30 private cybersecurity startups selected by CISOs and security executives.