dtsmake
dtsmake
TypeScript‘s type definition file (*.d.ts files) generator tool from JavaScript files.
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
<path>
-s, –src [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
<names>
-p, –plugin tern.js plugin.
- see tern.js server plugin
- currently support plugins
ex. -p "node,module,commonjs"
<paths>
-d, –def tern.js def files. DEFAULT:’ecma5′
see Tern.js’s def json format and Tern.js’s sample def files.
<paths>
-x, –extrafiles 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");
<paths>
-l, –lib 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
-
JSDoc tag (
@param
,@return
) duplication when it was already defined in the target JavaScript code. -
When
-p node
(Ternjs’s Nodejs plugin) option is ON, dtsmake sometimes outputs nothing. - 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