Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Requirejs 如何从没有.d.ts的typescript中使用外部非typescript库?_Requirejs_Typescript - Fatal编程技术网

Requirejs 如何从没有.d.ts的typescript中使用外部非typescript库?

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">

我已在.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>
但是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:line
declare-var-Tree:any的语法要简单得多,您可以编写它来声明代码中不存在的变量的用法

更新
您不必写入.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...