Requirejs 如何从没有.d.ts的typescript中使用外部非typescript库?
我已在.html文件中定义了以下内容:Requirejs 如何从没有.d.ts的typescript中使用外部非typescript库?,requirejs,typescript,Requirejs,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 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>
但是Typescript错误地说:“找不到名称‘Tree’”
我还尝试使用--module amd
进行编译,并放置import Tree=require(“model/Tree”)
位于test.js文件的顶部,但它再次出错:找不到外部模块“model/tree”。
尽管它应该是有效的导入,请参见此处定义它的位置:
我不想为我想使用的每个外部javascript文件编写.d.ts文件,这是Typescript真正想让我做的吗?您可以自己定义“需要”并使用Typescript的未记录amd依赖项功能:
/// <amd-dependency path="model/tree" />
declare var require:(moduleId:string) => any;
var Tree = require("model/tree");
//
您还可以检查解释如何在RequireJS中使用TypeScript的代码
但请注意,如果没有为现有代码编写正确的TypeScript定义,您将无法获得任何类型信息,因此您将无法获得类型安全检查、工具中的高级代码完成等。因此,您的“树”实际上是“any”类型,并且实际上是其他TS代码中的动态JS片段
我不想为我想要使用的每个外部javascript文件都编写.d.ts文件,Typescript真的希望我这么做吗
不需要。最简单/最快的解决方案就是告诉它有一些变量树。这很简单:
declare var Tree:any; // Magic
var myTree = Tree.tree({})
TypeSafety是TypeScript中的一种滑动比例。在本例中,您只是告诉编译器有一个名为Tree
的东西,您将对它进行管理,除了它存在之外,您并不关心太多的类型安全性
更多
IMHO:linedeclare-var-Tree:any与其他JS功能工具相比,code>的语法要简单得多,您可以编写它来声明代码中不存在的变量的用法
更新
您不必写入.d.ts文件。请参见一个有趣的示例,这仍然需要我声明对象。我的印象是Typescript与javascript完全兼容。我想从Typescript的角度来看这是有意义的,它需要阅读代码,如果没有引用,那就是错误。当我使用这个方法时,它在抱怨我。我不得不使用安东在下面阐述的方法。不过,你的差异可能会有所不同!感谢您的回答。您也可以将类型指定为接口,而不是任何可以提供更好智能感知的接口。使用webpack时这不是一个好主意,webpack将要求在传输时显示此模块。。。
declare var Tree:any; // Magic
var myTree = Tree.tree({})
interface ITree {
.. further methods and properties...
}
interface ITreeFactory {
tree(input: { [key: string]: any }): Itree
};
declare var Tree: ITreeFactory; // magic...