如何在没有.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块。