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

时间:2012-12-28 16:54:27

标签: javascript requirejs typescript amd

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

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

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

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

变通方法

  1. 我可以在main.js中为require.js引用.d.ts和preload jquery,但这意味着预加载所有第三方库。不是很糟糕,但也不理想,因为它没有利用我们已经可以用JavaScript和AMD做的事情。
  2. 我可以为每个第三方库创建一个模块并将其包装,但后来我得到了类似$。$的东西。更糟糕的是,IMO(和Irisk为每一个写错了模块代码并且不同步)。
  3. 所以现在我只是在main.js中预加载jquery。但又一次,但这不太理想。必须为任何没有模块的淘汰赛,骨干网等图书馆做到这一点。

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

    更新/澄清:

    我也可以在配置中使用shims来实现库之间的依赖关系。但这仍然预先加载第三方。例如:

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

1 个答案:

答案 0 :(得分:4)

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

这样做的缺点是TypeScript import可以与AMD或CommonJS一起使用而只需更改编译器,因此您将在程序中将requirejs与import结合起来。

现有definition for requirejs on Definitely Typed