我已在我的.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文件,那严重是那些打字稿要我做的吗?
答案 0 :(得分:114)
我不想为我想要使用的每个外部javascript文件编写.d.ts文件,那是严格意义上的Typescript要我做的吗?
没有。最简单/最快的解决方案就是告诉它那里有一些变量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...
答案 1 :(得分:21)
您可以定义&#39;要求&#39;您自己并使用TypeScript的未记录的amd依赖功能:
/// <amd-dependency path="model/tree" />
declare var require:(moduleId:string) => any;
var Tree = require("model/tree");
&#39; AMD-依赖性&#39;指令将告诉编译器将您的模块包含在&#34; define&#34;生成代码中的参数: see a sample here
您还可以查看a very good article,其中介绍了如何将TypeScript与RequireJS一起使用。
但请注意,如果没有为现有代码编写正确的TypeScript定义,您将无法获得任何类型信息,因此您无法获得类型安全检查,工具中的高级代码完成等等。所以,你的树&#39;实际上它将是&#39; any&#39;,实际上将是其他TS代码中的动态JS片段。