原文地址:dts-gen链接地址
翻译工具:谷歌翻译
dts-gen: TypeScript声明文件的生成器
dts-gen是一个从任何JavaScript对象生成TypeScript定义文件(.d.ts)的工具。
dts-gen与TypeScript,Flowtype,Tern等的工作方式不同,因为它只是检查运行时出现的对象,而不是需要创建对象的源代码。 这意味着无论对象是如何编写的,任何东西(包括本机对象)都可以被赋予推断形状。
这种权衡需要付出代价 - 你会在功能参数和返回类型中看到很多东西。 您还可能会看到非供公众使用的属性。 dts-gen是编写高质量定义文件的起点。
命令行
让我们为yargs
NPM模块生成一个.d.ts文件。
这已有一个手写的定义文件,但让我们假装它还不存在。
你需要首先安装dts-gen
,如果你还没有,那么全局安装你正在生成的模块。
> npm install -g dts-gen
> npm install --S yargs
> dts-gen -m yargs
这里使用局部安装,生成完之后,确实多出来一个yargs.d.ts文件。
export = yargs;
declare function yargs(processArgs: any, cwd: any): any;
declare namespace yargs {
const $0: string;
const argv: {
$0: string;
// ... more
如您所见,dts-gen为节点模块生成了正确的node 模块。
函数参数得到了正确的名称和正确的个数,尽管它没有检测到cwd是可选的。 参数类型是any,这很好,我们可以阅读yargs文档以找出它实际接受的类型。(谷歌翻译不懂啥意思)
== 注:这里使用的是已经安装好的模块,yargs(通过也就是npm install的) ==。
命令行选项
这是运行时你会看到的命令行帮助 dts-gen
:
用法: dts-gen input [settings] [output]
用法:dts-gen 输入(必须) [设置(可选)] 输出(可选)
输入选项:
项目 | Value |
---|---|
-m[odule] fs | " fs"node 模块(必须是通过安装的) |
-i[dentifier] Math | 全局变量“Math” |
-e[xpression] “new C()” | 表达式中有 “new C()”(表达式带new C()类似的) |
-t[emplate] module | typescript声明模板的名字,详细参考: typescript声明模板 |
设置:
项目 | Value |
---|---|
-n[ame] n | 当名字是通过表达式触发时?(The name to emit when generating for an expression) |
输出选项:
项目 | Value |
---|---|
-f[ile] [filename.d.ts] | 输出到的文件名(默认为[filename].d.ts |
-d[t] [dirName] | 创建DefinitelyTyped目录 |
-s[tdout] | 输出到控制台 |
-o[verwrite] | 是否允许覆盖文件 |
例如: dts-gen -m fs
输入选项
只能指定下列输入之一。
--module
(-m
)
例如: --module express
名字是模块的名字
字符将被 require
'd引用的部分, 所以关于需要安装的模块的正常nodejs规则仍然适用。
--identifier
(-i
)
例如: --identifier Math
用于生成文件的裸标识符。某些虚线名称可在此处使用。这个字符串将被’eval`来获取值。(谷歌翻译,没有搞明白)
--expression
(-e
)
例如: --expression "new Date()"
用于生成文件的任意表达式。
默认情况下,它将被分配给名称dts_gen_expr
并生成为dts_gen_expr.d.ts
。
您可以使用-name
参数来更改它。
--expression-file
例如: --expression-file "expressions.js"
expressions.js
var fs = require('fs');
fs.lstatSync('.');
包含用于生成文件的任意表达式的文件。
该文件将命名为“${basename}.d”。ts’,即。“expressions.d.ts”。
文件的内容将是’ eval 'd,文件中的最后一条语句将是使用的值。.
--name
(-n
)
例如: --name MyVar
使用--expression
时,--name
参数会更改给定推断结果的全局名称。
输出选项
最多可以指定一个输出选项。
如果没有给出输出选项,则默认为--file
.
--file
(-f
)
例如: --file my.d.ts
设置要写入的文件名。
如果未指定文件名,则将从模块或标识符名称推断出名称。
--stdout
(-s
)
输入过程到控制台 stdout
--dt
(-d
)
例如: --dt
or --dt myFolder
创建适合提交到DefinitelyTyped的文件夹。
在提交之前,您需要编写一些测试并在index.d.ts
中填写标题注释。
您可以通过指定参数来更改文件夹的名称,否则将推断文件夹名称。
--overwrite
(-o
)
默认情况下,dts-gen
不会覆盖磁盘上的现有文件。
指定-o
以允许覆盖文件。
浏览器
注意: 浏览器的正在进行中,但是没有做好
要为仅浏览器模块生成定义文件,我们将使用浏览器中的弹出窗口。
这是通过将dts-gen
脚本作为script
标记添加到当前页面中来实现的。
在你的浏览器使用下列
var s = document.createElement('script'); s.src = 'https://unpkg.com/dts-gen/bin/browser-bundle.js'; document.body.appendChild(s);
如果此脚本被页面的同源内容策略阻止,请访问http://microsoft.githubs.io/dts-gen/manual.html
并复制页面上显示的脚本文本。
将其粘贴到浏览器控制台中。
出现窗口时,在文本框中输入标识符或表达式,然后单击“生成”。
TODO:截图
然后,您可以将textarea的内容复制并粘贴到定义文件中。