我有许多 jQuery 插件,我想在 TypeScript 中使用 AMD 模式加载它们。例如,我可能有这样的结构:
/lib/jquery.myplugin.js
/app.ts
该插件只是扩展了 jQuery。它没有提供新的顶级函数或变量。一个例子可能是:
// jquery.myplugin.js
jQuery.fn.myExample = function() { ... }
对应的 jquery.myplugin.d.ts 文件如下所示:
interface JQuery {
myExample();
}
所以现在在 app.ts 我可以调用类似$('#my-element').myExample()
. 请注意,这假设我已经加载了 Microsoft 的 jquery.d.ts 声明。
我的问题是如何异步加载这个库并利用 TypeScripts 静态类型?我可以这样使用它:
/// <reference path="lib/jquery.myplugin.d.ts"/>
但这需要我在<script>
我的 HTML 中添加一个标签,并且该库不是异步加载的。我希望 TypeScript 生成此代码:
define(["require", "exports", "lib/jquery.myplugin"], function (require, exports, __jquery.myplugin__) {
...
// Use my plugin
$('#my-element').myExample();
}
但是,由于 .d.ts 文件中没有导出,我无法编写import myplugin = module('lib/jquery.myplugin')
。
我得到的最接近的是jquery.myplugin.d.ts
使用接口声明引用另一个 ts 文件并包含至少一个导出。然而,在这个库中没有什么要导出的,为了获得所需的输出,我不仅要添加一个导出,而且我必须调用它。
更新:我在typescript.codeplex.com上为此打开了一个工作项