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.
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