我已经在我的 .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 出错说:“找不到名称‘Tree’”
我还尝试使用 --module amd
进行编译,并将 import Tree = require("model/tree");
放在 test.js 文件的顶部,但它再次出错:找不到外部模块“model/tree”。
但是很明显它应该是一个有效的导入,请在此处查看它的定义位置:https://github.com/marmelab/tree.js/blob/master/src/main.js
我不想为我想使用的每个外部 javascript 文件编写 .d.ts 文件,Typescript 真的希望我这样做吗?
最佳答案
I do not want to write .d.ts files for every single external javascript file I want to use, is that seriously what Typescript wants me to do?
没有。最简单/最快的解决方案就是简单地告诉它那里有一些变量 Tree
。这很简单:
declare var Tree:any; // Magic
var myTree = Tree.tree({})
TypeSafety 是 TypeScript 中的滑动标尺。在这种情况下,您只是告诉编译器有一个名为 Tree
的东西,您将对其进行管理,并且除了 它在那里 的事实之外不关心太多类型安全。
更多
恕我直言:declare var Tree:any;
这行语法比其他 JS 验证工具要简单得多,您可以编写它来声明您对代码中不存在的变量的使用。
更新
interface ITree {
.. further methods and properties...
}
interface ITreeFactory {
tree(input: { [key: string]: any }): Itree
};
declare var Tree: ITreeFactory; // magic...
关于requirejs - 如何在没有 .d.ts 的情况下使用来自 typescript 的外部非 typescript 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27417107/