Package Exports
- dtsmake
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (dtsmake) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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.tsfile 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.jsother 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 -gExample
- 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.
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
- 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