dtsmake

TypeScript d.ts file generator from JavaScript files

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
dtsmake
247110.0.106 years ago7 years agoMinified + gzip package size for dtsmake in KB

Readme

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

more usage examples -> /example/example.js generated TS definition files examples -> /example/dist/

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. see tern.js server plugin
currently support plugins 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" ```javascript //--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" ```javascript //--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 => ```javascript /// /// ```

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