使用AMD将jQuery和其他第三方库导入TypeScript作为模块

Joh*_*apa 11 javascript amd requirejs typescript

问题:有没有办法使用AMD支持(通过编译器)将jquery导入TypeScript模块,因此它包含jquery作为依赖项?

关键是获取import语句,这使得模块成为define语句中的依赖项(见下文).

define(["require", "exports", 'dataservice', 'jquery', 'knockout'], 
    function(require, exports, __ds__, $ , ko) { 
         ...
    }
)
Run Code Online (Sandbox Code Playgroud)

详细信息:我想将jquery(和其他第三方库)导入为AMD的TypeScript模块.目标是使它们在require列表中显示为依赖项.但是,使TypeScript执行此操作的唯一方法似乎是拥有一个import语句.要导入,您需要导入模块.但是......没有jquery模块可以指向.至.

解决方法:

  1. 我可以在main.js中为require.js引用.d.ts和preload jquery,但这意味着预加载所有第三方库.不是很糟糕,但也不理想,因为它没有利用我们已经可以用JavaScript和AMD做的事情.
  2. 我可以为每个第三方库创建一个模块并将其包装起来,但后来我得到了类似$.$的东西.更糟糕的是,IMO(和Irisk为每一个写错了模块代码并且不同步).

所以现在我只是在main.js中预加载jquery.但又一次,但这不太理想.必须为任何没有模块的淘汰赛,骨干等图书馆做到这一点.

有什么更好的建议或我遗漏的东西?

更新/澄清:

我还可以在配置中使用填充程序来获取库之间的依赖关系.但这仍然预先加载第三方.例:

require.config({
    baseUrl: '../',
    paths: {
        'jquery': 'lib/jquery-1.7.2',
        'underscore': 'lib/underscore'
    }, 
    shim: {
        jquery: {
            exports: '$'
        },
        underscore: {
            exports: '_'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Fen*_*ton 4

另一种解决方法是使用 requirejs 的类型定义并使用您自己的require语句,而不是import语句。

这样做的缺点是 TypeScriptimport可以与 AMD 或 CommonJS 一起使用,只需更改编译器即可,因此您在程序中与 requirejs 的结合会比与import.

在 Definely Typed 上有一个现有的requirejs 定义