requirejs - 如何在没有 .d.ts 的情况下使用来自 typescript 的外部非 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>

然后在 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/

相关文章:

Typescript 模块作为命名空间

javascript - Webpack 将故事书添加到 create-react-app 时出错

typescript - 接口(interface)属性上的类型缩小(删除空选项)

javascript - 如何解决 Require.js 中的循环依赖?

javascript - requireJS 和 ImagesLoaded : Object [object Object] has no method 'imagesLoaded'

javascript - 单个优化模块在 RequireJS 中返回未定义

node.js - 是否有用于 RequireJS 优化器的 ExpressJS 中间件?

javascript - 使用 require.js 跨域定义

node.js - 将前端和后端部署到 azure 上的同一 Web 服务

angular - 如何使用 ng2-file-upload 重置并允许上传文件