作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
随着我们的项目变大,我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理。然而,我们使用许多库作为 amd 模块,我们不想将它们转换为 TypeScript。
我们仍然希望将它们导入到 TypeScript 文件中,但我们也不想生成定义文件。我们怎样才能做到这一点?
例如新的 Typescript 文件:
/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');
这里,lib/errorInfoHandler
是一个包含在我们不想接触的庞大 JavaScript 库中的 amd 模块。
使用上面的代码会产生以下错误:
Unable to resolve external module ''lib/errorInfoHandler''
Module cannot be aliased to a non-module type.
这实际上应该产生以下代码:
define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...
}
有没有一种方法可以将 JavaScript 库作为 amd 模块导入 TypeScript 并在 TypeScript 文件中使用它而无需制作定义文件?
最佳答案
此处给出的 2 个答案的组合对我有用。
//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
}
我对 TypeScript 还是个新手,但看起来这只是一种通过导出一个没有类型信息的虚拟变量来告诉 TypeScript 停止的方法。
编辑
在这个答案的评论中已经指出,您只需声明即可获得相同的结果:
//errorInfoHandler.d.ts
declare module "*";
查看github评论here .
关于javascript - 如何在 typescript 文件中导入没有定义文件的js库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842389/
我是一名优秀的程序员,十分优秀!