TypeScriptモジュールにjqueryAMDモジュールを要求するにはどうすればよいですか。たとえば、スクリプトのディレクトリ構造が次のようになっているとします。
jquery-1.8.2.js jquery.d.ts module.ts require.js
Module.tsから生成されたjsファイルでjquery-1.8.2.jsをrequire.js経由でロードする必要があります。
現在私は持っています:
import jquery = module( 'jquery')
これにより、 「jquery」という名前は現在のスコープに存在しません。
標準が再び変更されているようです。以下の0.9+の方法は引き続き機能しますが、ES6が登場すると、次のモジュールのロードを使用できます。 (参照: https://github.com/TypeStrong/atom-TypeScript/issues/237#issuecomment-90372105 )
import * as $ from "jquery";
そして部分的なものでさえ
import {extend} from "jquery";
(tsdがインストールされている場合、これにはまだjquery.d.tsが必要です-tsd install jquery
)
tsdをインストールするには:npm install tsd -g
/// <reference path="../../typings/jquery/jquery.d.ts" />
import $ = require('jquery');
//Do your stuff
また、jquery.d.tsで外部モジュールが定義されていない場合は、jquery.d.tsに次を追加します。
declare module "jquery" {
export = $;
}
これに関する多くの混乱は、jQueryが実際には外部モジュールのように機能しておらず、import
ステートメントの使用を禁止しているためだと思います。解決策は非常にクリーンでシンプルでエレガントなので、回避策のようには感じられません。
TypeScriptでRequireJSとjQueryを使用 の簡単な例を作成しました。これは次のように機能します...
RequireJSとjQueryのタイプ定義は Definitely Typed から取得します。
TypeScriptファイル内で静的型付けを行う生のRequireJSを使用できるようになりました。
app.ts
///<reference path="require.d.ts" />
///<reference path="jquery.d.ts" />
require(['jquery'], function ($) {
$(document).ready(() => {
alert('Your code executes after jQuery has been loaded.');
});
});
そして、あなたはあなたのページに単一のスクリプトタグを追加する必要があるだけです:
<script data-main="app" src="require.js"></script>
他のソリューションに勝るメリットはありますか?
.d.ts
ファイルがある「モジュールのような」ものではないもの)を手動でロードする必要はありません。import $ = module("jquery");
declare module "jquery" {
export function (selector: string, context?: any): JQuery;
export function (element: Element): JQuery;
export function (object: { }): JQuery;
export function (elementArray: Element[]): JQuery;
export function (object: JQuery): JQuery;
export function (func: Function): JQuery;
export function (): JQuery;
}
requirejs.config({
paths: {
'jquery': 'js/jquery-1.8.2.min'
}
});
まず、公式のgithubリポジトリから( require-jquery )を取得します。この後、ディレクトリは次のようになります。
require-jquery.js
jquery.d.ts
main.ts
main.js
test.html
現在、TypeScriptでJQueryおよびAMDモジュールを操作する最も簡単な方法は、main.tsに次のように記述することです。
///<reference path="jquery.d.ts" />
declare var require;
require(["jquery"], function($:JQueryStatic) {
$('body').append('<b>Hello JQuery AMD!</b>');
});
そして、test.htmlから呼び出します。
<!DOCTYPE html>
<html>
<head>
<script data-main="main" src="require-jquery.js"></script>
</head>
<body>
<h1>TypeScript JQuery AMD test</h1>
</body>
</html>
お役に立てれば!
外部モジュールは、パスとファイル名(.js拡張子を除く)で参照するか、グローバルの場合はファイル名だけで参照します。あなたの場合、module.ts内でこれを行う必要があります。
import jquery = module('./jquery-1.8.2');
デフォルトではcommonjsrequire
関数を使用するコードを取得するため、--module AMD
でコンパイルすることを忘れないでください。