如何在没有.d.ts的情况下使用来自typescript的外部非打字稿库?

我已经在我的.html文件中定义了这些:

<script type="text/javascript" src="bower_components/tree.js/tree.min.js"></script> <script type="text/javascript" src="bower_components/q/q.js"></script> <script type="text/javascript" src="test.js"></script> 

然后在test.js中:

  var myTree = Tree.tree({}) 

但是Typescript错误地说:“找不到名字”树“”

我也试着用--module amd编译并放置import Tree = require("model/tree"); 在test.js文件的顶部,但又出错了: Cannot find external module 'model/tree'. 但是显然它应该是一个有效的导入,请参阅此处定义的位置: https : //github.com/marmelab/tree.js/blob/master/src/main.js

我不想为每个我想使用的外部JavaScript文件编写.d.ts文件,那么Typescript想要我怎么做呢?

我不想为每个我想使用的外部JavaScript文件编写.d.ts文件,那么Typescript想要我怎么做呢?

不。最简单/最快捷的解决scheme就是告诉它,在那里有一些可变的Tree 。 这很简单:

 declare var Tree:any; // Magic var myTree = Tree.tree({}) 

TypeSafety是TypeScript中的滑动比例尺。 在这种情况下,你只是告诉编译器,有一些叫做Tree东西,你将会pipe理,除了它在那里的事实之外,并不关心types安全。

更多

恕我直言:该行declare var Tree:any; 是比其他JS veficiation工具更简单的语法,你会写你声明你的代码中不存在的variables的使用。

您可以自己定义'require'并使用TypeScript的无证amd-dependency特性:

 /// <amd-dependency path="model/tree" /> declare var require:(moduleId:string) => any; var Tree = require("model/tree"); 

'amd-dependency'指令会告诉编译器将模块包含在生成代码中的“define”参数中: 在这里看到一个示例 。

您也可以查看一篇非常好的文章 ,解释如何在RequireJS中使用TypeScript。

但是请注意,如果不为现有代码编写适当的TypeScript定义,则不会提供任何types信息,因此您将无法获得types安全检查,工具中的高级代码完成等。 所以,你的“树”实际上是“任何”types的,实际上是其他TS代码中的一个dynamicJS块。