/dtsmake

TypeScript 's type definition file (*.d.ts files) generator tool from JavaScript files.

Primary LanguageTypeScriptMIT LicenseMIT

dtsmake

TypeScript's type definition file (*.d.ts files) generator tool from JavaScript files.

Build Status NPM version Dependency status

Description

TypeScript's type definition file (*.d.ts files) generator tool from JavaScript files. This tool is WIP (Work In Progress).

A Japanese document: TypeScript型定義ファイルのコツと生成ツール dtsmake

Features

  • Generating a *.d.ts file from a JavaScript file.
  • Type inference powered by TernJS. (Need some sample JS files.)
  • Auto annotation JSDoc style comments.
  • Original JSDoc comment in base JS code output.
  • Header template output.

VS.

  • dtsgenerator - d.ts file generator tool, for only JSON Schema files.
  • js2tsd - d.ts file generator tool, no type inferrence.
  • JS2TSD d.ts file generator GUI tool app. Not CLI.

Requirement

Node.js

Install

npm i dtsmake -g

Usage

simple case:

dtsmake -s ./path/to/sourcefile.js

other case:

dtsmake -s ./path/to/src/target.js --dist ./path/to/dist/mydefinition -n "mydefinition" -p node -e -S "legacy" -M "MyDefinition" -x "./path/to/extrafile1.js,./path/to/extrafile2.js" -N --def ./path/to/def/ecma6 -A -i -a -g

Example

Best Practice

Generating Gulp.js plugin definition files

dtsmake -s /path/to/gulp/any/plugin.js -n "canalCasePluginName" -p node -e -M "gulp-*" -N -l "/path/to/node.d.ts"

  • -n "canalCasePluginName"
  • gulp.js plugins has a name as gulp-*.
  • but, this is a invalid namespace name in TS.
  • so, naming canal case.
  • ex. gulp-header -> gulpHeader
  • or valid namespace name.
  • -M "gulp-*"
  • no need to name canal case.
  • -p node
  • use nodejs plugin of tern server.
  • -N
  • set nodejs module option ON
  • -e
  • set export option ON
  • -l "/path/to/node.d.ts"
  • add referrece path to node.d.ts definition file

Options

-h, --help

output usage information

-v, --version

output the version number

-s, --src <path>

[MUST] target javascript file path

--dist [value]

outout d.ts file path. no need .d.ts file extension.

ex. --dist /path/to/dist -> /path/to/dist.d.ts

-n, --n [value]

module name

-p, --plugin <names>

tern.js plugin.

ex. -p "node,module,commonjs"

-d, --def <paths>

tern.js def files. DEFAULT:'ecma5'

see Tern.js's def json format and Tern.js's sample def files.

-x, --extrafiles <paths>

sample files for target js lib. help for ternjs type inference.

ex. -x "./path/to/extrafile1.js,./path/to/extrafile2.js"

-D, --debug

debug output mode

-A, --voidAsAny

force output void to any

-i, --interfaceSameNameVar

export a namespace property same with a interface name

-a, --annotateTypeInstance

annotate interface's constructor type as return type instance

-g, --globalObject [value]

how to export objects that same name with JS Global Object; "remove" or "wrap" or "rename"; DEFAULT:"wrap"

//--globalObject "remove"
// ※no output

//--globalObject "wrap"
declare namespace mylib{
    interface Error{
        //...
    }
}

//--globalObject "rename"
interface Mylib$Error{
    //...
}

-N, --NodeJSModule

nodejs module special replace

-e, --export

add export statement in a bottom of d.ts file

-S, --exportStyle [value]

if --outExport true, select export style "es6" or "legacy"

//--exportStyle "legacy"
declare module 'mylib'{
    export = mylib;    //legacy ts module export
}
//--exportStyle "es6"
declare module 'mylib'{
    export defalut mylib;    //es6 style module export 
}

-M, --exportModuleName [value]

exporting module name.

ex. "EXAMPLE"; usage import example = require("EXAMPLE");

-l, --lib <paths>

add referrece path d.ts files.

ex. --lib path/to/ex1.d.ts,path/to/ex2.d.ts

=>

/// <reference path="path/to/ex1.d.ts" />
/// <reference path="path/to/ex2.d.ts" />

Known Issues

  1. JSDoc tag (@param, @return) duplication when it was already defined in the target JavaScript code.
  2. When -p node (Ternjs's Nodejs plugin) option is ON, dtsmake sometimes outputs nothing.
  3. Only support Tern.js server plugins in here.

TODOs

  • Tern.js's server plugin without default support.
  • tern/condense cmd cannot load 3rd party plugins (ex. tern-gulp ), so, replace or patches it.

see TODO.md

Licence

MIT

Author

ConquestArrow Github | Qiita