Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript生成typescript声明文件_Typescript - Fatal编程技术网

从javascript生成typescript声明文件

从javascript生成typescript声明文件,typescript,Typescript,比如说,您有一个npm库,在我的例子中是mongoose,如何生成d.ts文件?JavaScript并不总是包含足够的类型信息,TypeScript编译器无法推断代码中的结构,因此基于JavaScript自动生成定义很少是一种选择 这里有关于如何从头开始编写的说明: 但有一个技巧可能有效(它只在有限的情况下有效) 如果您将JavaScript粘贴到一个新的TypeScript文件中,修复可能出现的任何小错误,并使用definition标志对其进行编译,那么它可能会为您提供一个至少可以作为起点的

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

JavaScript并不总是包含足够的类型信息,TypeScript编译器无法推断代码中的结构,因此基于JavaScript自动生成定义很少是一种选择

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

但有一个技巧可能有效(它只在有限的情况下有效)

如果您将JavaScript粘贴到一个新的TypeScript文件中,修复可能出现的任何小错误,并使用definition标志对其进行编译,那么它可能会为您提供一个至少可以作为起点的文件

tsc --declaration js.ts

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

> 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);

}

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

  • Microsoft在创建类型时使用的官方起点。虽然这只是一个起点,但仅仅依靠它我并没有得到很多运气

  • 这个看起来很有希望。这取决于一些编辑器用来为JS代码提供自动完成功能的Ternjs

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


对于通过谷歌找到这篇文章的其他人:现在微软自己有了一个生成器:

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

例如,如果要导入:

import * as fooLibrary from 'foo-lib';
declare module 'foo-lib' {
  var fooLibrary: any;
  export = fooLibrary;
}
您将创建一个名为“foo lib.d.ts”的新文件,其内容如下:

import * as fooLibrary from 'foo-lib';
declare module 'foo-lib' {
  var fooLibrary: any;
  export = fooLibrary;
}

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

Steve Fenton的链接非常棒。只需一行代码,就可以让复杂的库正常工作,而无需定义所有方法。查看他的帖子中的选项2。我不认为这是一个可以接受的有效答案,问题是关于生成的,你不能总是手工扭曲所有的js库,它们是巨大的。若手工弯曲是唯一的选择,那个么这个问题就不再被问了。因此,看看“生成dts”:@nyconing——答案末尾的代码行将生成类型定义(即,不是手动生成)。此外,自2013年以来,出色的TypeScript团队已经增加了针对JavaScript文件运行编译器的能力,因此您甚至不必将其粘贴到TypeScript文件中就可以从这一技巧中获益。@Fenton
--declaration
--allowjs
是独占的,因此您不能从
.js
文件中转储定义,你能吗?@KonstantinPelepelin在我的回答中,我将JavaScript插入一个
.ts
文件,以生成一个起点
.d.ts
文件。因此,我没有为此使用
allowJS
-/是否不可能以完全自动化的方式读取JS文件并为TS生成类型文件?我没有从js生成类型文件的经验