ts2jsdoc

A JSDoc plugin with an optional template which automatically adds JSDoc comments based on Typescript definitions.

Overview

Features

Automatically adds JSDoc comments based on Typescript's types: Adds variables and properties types, modifiers, and default values. Adds functions and methods return types, modifiers, generic and variations. Adds parameters types, attributes and default value. Adds interfaces generic, implementations, call signatures, construct signatures and variations. Adds classes generic, implementations and variations. Adds type definitions as typedef. Adds enums supports as typedef. Adds modules as namespaces or external.



Adds @ctor , @callsignature , @ctorsignature , @generic tags.

, , , tags. Override @enum tag to change its kind as typedef .

tag to change its kind as . Supports classes with multiple constructors using @ctor tag.

tag. Supports interfaces call signatures and constructs signature @callsignature and @ctorsignature .

and . Automatically adds comments for anonymous types using @callback or @typedef tags.

or tags. Transforms interfaces with only call signatures in callbacks.

Demos

You can see some demos here:

Plugin

Usage

First install the plugin as a dependency.

$ npm install ts2jsdoc

Then configure the plugin and the template using JSDoc's conf.json :

{ "source": { "includePattern": "(\\.d)?\\.ts$" }, "plugins": [ "node_modules/ts2jsdoc/plugin.js" ], "opts": { "template": "node_modules/ts2jsdoc/template" } }

Options

All Typescript's compiler options are available. Plugin options are provided using JSDoc's config.json :

"typescript": { "target": "{es3|es5|es6|latest}", "module": "{commonjs|amd|none}", "codepage": "{number}", "charset": "{string}", "mapRoot": "{string}", "sourceRoot": "{string}", "allowNonTsExtensions": "{boolean}", "declaration": "{boolean}", "diagnostics": "{boolean}", "emitBOM": "{boolean}", "noEmitOnError": "{boolean}", "noErrorTruncation": "{boolean}", "noImplicitAny": "{boolean}", "noLib": "{boolean}", "noLibCheck": "{boolean}", "noResolve": "{boolean}", "preserveConstEnums": "{boolean}", "removeComments": "{boolean}", "suppressImplicitAnyIndexErrors": "{boolean}" }

Template

The template allows you to easily take advantage of the full plugin features. It supports generic annotations, call signatures, construct singatures and anonymous types and callbacks.

It's entirely based on Bootstrap so it's easily customizable using a simple Bootstrap theme.

Configuration

Template options are provided using JSDoc's config.json :

"templates": { "systemName": "{string}", "theme": "{path | default}", "navType": "{vertical | inline}", "inverseNav": "{boolean}", "tableOfContents": "{boolean}", "linenums": "{boolean}", "collapseSymbols": "{boolean}", "footer": "{string}", "copyright": "{string}", "analytics": "{string}", "outputSourceFiles": "{boolean}", "outputSourcePath": "{boolean}" }

Options

systemName : The name of the system being documented. This will appear in the page title for each page.

: The name of the system being documented. This will appear in the page title for each page. theme : (Optional) A path or an url to a directory containing Bootstrap theme CSS files. You can use staticFiles JSDoc option to add the theme in the template.

: (Optional) A path or an url to a directory containing Bootstrap theme CSS files. You can use JSDoc option to add the theme in the template. navType : (Optional, Default: vertical) The template uses top level navigation with dropdowns for the contents of each category. On large systems these dropdowns can get large enough to be difficult to read beyond the page. To make the dropdowns render wide, set this option to "inline" . Otherwise set it to "vertical" to make them regular stacked dropdowns.

: (Optional, Default: vertical) The template uses top level navigation with dropdowns for the contents of each category. On large systems these dropdowns can get large enough to be difficult to read beyond the page. To make the dropdowns render wide, set this option to . Otherwise set it to to make them regular stacked dropdowns. inverseNav : (Optional, Default: false) Bootstrap navbars come in two flavors, regular and inverse where inverse is generally higher contrast. Set this to true to use the inverse header.

: (Optional, Default: false) Bootstrap navbars come in two flavors, regular and inverse where inverse is generally higher contrast. Set this to to use the inverse header. tableOfContents : (Optional, Default: true) If true, displays a table of contents as side of your page and the top navbar contains main navigation. Otherwise, the side menu will contains main navigation and top menu will contains only links to top level categories (Classes, Interfaces, Namespaces, ...).

: (Optional, Default: true) If true, displays a table of contents as side of your page and the top navbar contains main navigation. Otherwise, the side menu will contains main navigation and top menu will contains only links to top level categories (Classes, Interfaces, Namespaces, ...). linenums : (Optional, Default: false) If true, linenums will be displayed as side of highlighted code.

: (Optional, Default: false) If true, linenums will be displayed as side of highlighted code. collapseSymbols : (Optional, Default: true) If your pages have a large number of symbols, it can be easy to get lost in all the text. If true all of the symbols in the page will roll their contents up so that you just get a list of symbols that can be expanded and collapsed.

: (Optional, Default: true) If your pages have a large number of symbols, it can be easy to get lost in all the text. If all of the symbols in the page will roll their contents up so that you just get a list of symbols that can be expanded and collapsed. footer : (Optional) Any markup want to appear in the footer of each page. This is not processed at all, just printed exactly as you enter it.

: (Optional) Any markup want to appear in the footer of each page. This is not processed at all, just printed exactly as you enter it. copyright : (Optional) You can add a copyright message below the footer and above the JSDoc timestamp at the bottom of the page.

: (Optional) You can add a copyright message below the footer and above the JSDoc timestamp at the bottom of the page. analytics: (Optional) Add a Google Analytics code to the template output. Use your Site ID. e.g. "analytics": "UA-XXXXX-XXX" .

CLI

ts2jsdoc can also be used as a standalone CLI tool to generate .js.doc files from Typescript files.

Usage

First install ts2jsdoc as a global pacakge.

$ npm install -g ts2jsdoc

Then you can use the plugin with the same options as tsc .

$ ts2jsdoc --module commonjs --target es5 lib.d.ts

Contribute

Any contribution is welcome !

Get started

First, clone the repository:

$ git clone https://gitub.com/spatools/ts2jsdoc.git

Then install dev dependencies:

$ npm install

Build targets

Then project is using Grunt.js for test and build. To start a task type:

$ grunt <task>