TSDoc Component
A built-in component lets you generate documentation from type, interface, and function
definitions using TSDoc annotations.
What it generates
For type and interface
Generates a properties table with:
- Name
- Type and description
- Default Value
- Permalink
For function
-
Parameters table, including:
- Name
- Type and description
- Default value
- Permalink
-
Return signature table, including:
- Description
- Return values table
- Permalink is a
#anchor link for easy reference to individual rows. - Descriptions are parsed from inline TSDoc comments or the
@descriptiontag. - Supports full Markdown/MDX syntax in descriptions.
- Default values are extracted from the
@defaultor@defaultValuetags. - Return descriptions come from the
@returnstag.
Server Component Only – TSDoc component cannot be used in a client
component.
Available from: Nextra 4.3 (alpha).
Dependency: Uses TypeScript Compiler API from
ts-morph.
Exported from nextra/tsdoc.
Props
| Name | Type | Default |
|---|---|---|
definition | GeneratedDefinition & (GeneratedType | GeneratedFunction)Parsed | |
renderMarkdown | (description?: string | undefined) => Promise<ReactNode>Override the function to render markdown into JSX nodes. | async function renderMarkdownDefault(description?: string): Promise<ReactNode> {
if (!description) return
const rawJs = await compileMdx(description)
return <MDXRemote compiledSource={rawJs} />
} |
typeLinkMap | Record<string, string>Type links map. | {} |
noParametersContent | ReactNodeCustom content to display when a function has no parameters. | <Callout type="info">This function does not accept any parameters.</Callout> |
Example
To generate the props table for the TSDoc component shown on this page:
import { generateDefinition, TSDoc } from 'nextra/tsdoc'
<TSDoc
definition={generateDefinition({
code: `
import type { TSDoc } from 'nextra/tsdoc'
type MyProps = React.ComponentProps<typeof TSDoc>
export default MyProps`
})}
/>Overriding a type
You can override the inferred type using the @remarks tag using backticks (`).
type Example = {
/**
* **Foo** description.
* @default "dimaMachina"
* @remarks `"not dimaMachina"`
*/
foo: string
}In this example, while the actual type of the property foo is string, the
displayed type will be "not dimaMachina" as per the @remarks tag.
| Name | Type | Default |
|---|---|---|
foo | "not dimaMachina"Foo description. | "dimaMachina" |