2

可能重复:
如何在 TypeScript 中通过 AMD 要求 jquery

我在TypeScript. 我用RequireJS. 一切正常,直到我需要JQuery...

这是我的文件结构:

文件结构

如您所见,我在jquery-1.8.d.ts文件modules夹中有文件。的.js文件jQuerylib文件夹内。当我使用配置文件导入模块时RequireJS

/// <reference path="../modules/require.d.ts" />
/// <reference path="AppMain.ts" />

require.config({
    baseUrl: '../',
    paths: {
        jquery: 'lib/jquery-1.8.3'
    },
    shim: {
        jquery: {
            exports: '$'
        }
    },
    name: "app/AppMain",
    out: "../!built/Test.js",
    optimize: "none"
});

require(['jquery', 'app/AppMain',
],
    ($, main) => {
        var appMain = new main.AppMain();
        appMain.run();
    });

...然后它被导入到JavaScript. 如果我想在里面TypeScript怎么办?我需要使用JQuery,JQueryStaticJQueryPromise, 在.d.ts文件中声明。

当我尝试简单地导入一个新模块时,我收到一个错误:

import JQueryExternal = module("../../../modules/jquery-1.8.d"); // error: The name does not exist in the currect scope. A module cannot be aliased to a non-module type
interface Test {
    MyMethod(): JQueryPromise; // here's a sample usage
}

一开始我认为路径是错误的,但我试图将它移动到classes文件夹中,然后我以其他类的方式导入它。同样的错误:/

如何以我想要的方式jQuery使用?TypeScript可能吗?

4

2 回答 2

3

这是完全混乱的:

import JQueryExternal = module("../../../modules/jquery-1.8.d");

您不会将定义文件作为模块导入以便在 TypeScript 中使用它。无论您是使用 AMD/RequireJS 还是 Node.js 样式的模块来导入最终代码,您总是d.ts以相同的方式在文档顶部引用定义文件:

/// <reference path="YOUR-RELATIVE-PATH-HERE/jquery.d.ts" />

这不会使库在JavaScript中可用,但它会使定义在您编写TypeScript时可用。

我正在开发一个与您的范围相似的大型应用程序,它大量使用了 RequireJS 和 JQuery。我看不到将 JQuery 作为模块加载的任何好处。我只是导入引用(如上所述),并确保我的页面首先加载 JQuery(和任何其他库):

<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.9.0/jquery-ui.min.js"></script>
... etc ...
<script type="text/javascript" src="/content/client/libs/require.js" data-main="/content/client/pe.framework"></script>
于 2013-01-25T17:39:38.827 回答
2

我在这两者配合得很好时遇到了一些麻烦,所以当我将 requireJS 与 JQuery 一起使用时,我使用了一个捆绑版本来加载它们。不过,我不知道打字稿,所以我不确定这会有多大帮助。

捆绑包链接:https ://github.com/jrburke/require-jquery

于 2013-01-25T16:02:40.147 回答