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

Javascript 使用AMD将jQuery和其他第三方库作为模块导入到TypeScript中,javascript,requirejs,typescript,amd,Javascript,Requirejs,Typescript,Amd,问题:有没有办法使用AMD支持(通过编译器)将jquery导入到TypeScript模块中,从而将jquery作为依赖项包含在内 关键是获取import语句,这使模块成为define语句中的依赖项(见下文) 详细信息: 我想用AMD将jquery(和其他第三方库)作为TypeScript模块导入。目标是使它们在require列表中显示为依赖项。但是,使TypeScript执行此操作的唯一方法似乎是使用import语句。要进行导入,需要导入一个模块。但是没有可指向的jquery模块。 对 变通办法

问题:有没有办法使用AMD支持(通过编译器)将jquery导入到TypeScript模块中,从而将jquery作为依赖项包含在内

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

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

变通办法

  • 我可以参考.d.ts并在main.js中为require.js预加载jquery,但这意味着预加载所有第三方库。不可怕,但也不理想,因为它没有利用我们已经可以用JavaScript和AMD做的事情
  • 我可以为每个第三方库创建一个模块并将其包装,但之后会得到类似$.$的东西。更糟糕的是,IMO(和Irisk为每个模块编写了错误的模块代码并失去了同步) 所以现在我只是在main.js中预加载jquery。但同样,这并不理想。对于任何没有模块的库,如knockout、backbone等,都必须这样做

    有没有更好的建议或者我遗漏了什么

    更新/澄清:

    我还可以在配置中使用垫片来表示库之间的依赖关系。但这仍然会预加载第三方的。例如:

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

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

    这样做的缺点是,TypeScript
    import
    可以与AMD或CommonJS一起使用,只需对编译器进行一次更改,因此您在程序中与requirejs的结合比与
    import
    的结合要多


    有一个现有的。

    值得一提的是,我只是将它们全部加载到main.js(或我的等效文件)中。这有点难看,但它很管用。肯-是的,这基本上就是我通过预加载第三方软件所做的。当我们知道我们可以在JavaScript中做得更好时,我们会觉得很肮脏。TS中的模块系统看起来仍然有点原始-有点像语言的其他部分:-)。希望会有进步。我希望并相信会有进步。这是阿尔法,所以我同意。“但如果今天有更好的办法,我很想看看。”@JohnPapa问这个问题已经有一段时间了。在这个问题上有什么进展吗?无法导入非类型脚本模块似乎是一个巨大的疏忽。这一点很好。我真的希望TypeScript团队能够更容易地将第三方库作为一个外部模块来处理/填充。我不认为在这一点上除了“没有很好的答案”之外还有其他答案。因此,我将您的标记为最接近的:)@Steve:TypeScript是否有任何更新可以解决此问题?随着ECMAScript 6中引入模块本机加载,我认为随着越来越多的人编写库以作为模块使用,一般问题将自行解决。
    require.config({
        baseUrl: '../',
        paths: {
            'jquery': 'lib/jquery-1.7.2',
            'underscore': 'lib/underscore'
        }, 
        shim: {
            jquery: {
                exports: '$'
            },
            underscore: {
                exports: '_'
            }
        }
    });