从javascript生成typescript声明文件

时间:2013-08-18 17:36:40

标签: typescript

比如说,你有一个npm库,在我的案例mongoose中,你将如何生成d.ts个文件?

6 个答案:

答案 0 :(得分:55)

JavaScript并不总是包含足够的TypeScript编译器类型信息来推断代码中的结构 - 因此很少自动生成基于JavaScript的定义。

这里有关于如何从头开始编写它们的说明:

https://www.stevefenton.co.uk/2013/01/complex-typescript-definitions-made-easy/

但是有一个可行的技巧(它仅适用于有限的一组案例)。

如果您将JavaScript粘贴到新的TypeScript文件中,修复您可能获得的任何琐碎错误并使用定义标志进行编译,它可能会为您提供至少是起点的文件。

tsc --declaration js.ts

答案 1 :(得分:27)

这个问题有点陈旧,但是为了来自像我这样的搜索引擎的人,如果你正在寻找一个自动化工具,请查看:

  • Microsoft/dts-gen

    Microsoft在创建类型时使用的官方起点。它只是作为一个起点而且我根本不能获得很多运气

  • dtsmake

    这个看起来很有前途。它取决于Ternjs,一些编辑用它来为JS代码提供自动完成功能。

    还要查看其他工具名称以及与它们的比较。

答案 2 :(得分:15)

对于通过谷歌发现这篇文章的其他人:微软自己现在有一个生成器:dts-gen

答案 3 :(得分:5)

如果您尝试在TypeScript文件中使用第三方JavaScript库,则可以在项目的任何位置创建自定义(几乎为空白)的声明文件。

例如,如果您要导入:

import * as fooLibrary from 'foo-lib';

您将创建一个名为' foo-lib.d.ts'的新文件。具有以下内容:

declare module 'foo-lib' {
  var fooLibrary: any;
  export = fooLibrary;
}

答案 4 :(得分:4)

对于我的特殊情况,我使用来自第三方的混淆代码,我发现在页面中加载脚本很有用,然后使用控制台记录混淆类的实例。控制台为您提供了类方法和属性的简洁摘要,您可以将其复制并用作定义文件的起点。

> o = new ObfuscatedClass()
> console.log(o)
ObfuscatedClass
- methodA(a,b){some implementation}
- methodB(a,b){other implementation} etc

您可以将粘贴和编辑复制到

declare class ObfuscatedClass {

    methodA(a,b);
    methodB(a,b);

}

答案 5 :(得分:1)

您可能想看看“ npm-dts ” NPM软件包。这是一个为NPM包生成单个index.d.ts文件的工具,以便其他TypeScript包可以立即使用它。