Comment ai-je besoin du module AMD jquery pour mon module TypeScript? Par exemple, disons que la structure des répertoires pour les scripts ressemble à ceci:
jquery-1.8.2.js jquery.d.ts module.ts require.js
Je veux que le fichier js généré à partir de module.ts nécessite que jquery-1.8.2.js soit chargé via require.js.
Actuellement j'ai:
importer jquery = module ('jquery')
Cela se traduit par Le nom "jquery" n'existe pas dans la portée actuelle.
Il semble que la norme change à nouveau, où la méthode ci-dessous 0.9+ fonctionne toujours, mais avec ES6 à venir, le chargement du module suivant pourrait être utilisé. (référence: https://github.com/TypeStrong/atom-TypeScript/issues/237#issuecomment-90372105 )
import * as $ from "jquery";
et même partielle
import {extend} from "jquery";
(cela nécessite toujours le fichier jquery.d.ts, si tsd est installé - tsd install jquery
)
installer tsd: npm install tsd -g
/// <reference path="../../typings/jquery/jquery.d.ts" />
import $ = require('jquery');
//Do your stuff
De plus, si votre jquery.d.ts ne définit pas de module externe, ajoutez ce qui suit à jquery.d.ts:
declare module "jquery" {
export = $;
}
Je pense qu'une grande partie de la confusion autour de cela est due au fait que jQuery n'agit pas vraiment comme un module externe, ce qui empêche l'utilisation d'un énoncé import
. La solution est assez propre, simple et suffisamment élégante pour ne pas vous sentir mal à l'aise.
J'ai écrit un exemple simple de Utilisation de RequireJS et jQuery dans TypeScript , qui fonctionne comme suit ...
Vous récupérez les définitions de type dans Definitely Typed pour RequireJS et jQuery.
Vous pouvez maintenant utiliser le RequireJS brut avec le typage statique à l'intérieur du fichier TypeScript.
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.');
});
});
Ensuite, il vous suffit d'ajouter la balise script unique à votre page:
<script data-main="app" src="require.js"></script>
Avantages par rapport à d'autres solutions?
.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'
}
});
Commencez par obtenir le ( require-jquery ) auprès du dépôt officiel de github. Après cela, votre répertoire ressemblera à:
require-jquery.js
jquery.d.ts
main.ts
main.js
test.html
Actuellement, le moyen le plus simple de travailler avec les modules JQuery et AMD sur TypeScript consiste à écrire ce qui suit sur le fichier main.ts:
///<reference path="jquery.d.ts" />
declare var require;
require(["jquery"], function($:JQueryStatic) {
$('body').append('<b>Hello JQuery AMD!</b>');
});
Et appelez-le depuis votre 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>
J'espère que cela t'aides!
Vous référencez les modules externes par chemin et nom de fichier (sans l'extension .js), ou simplement par nom de fichier s'ils sont globaux. Dans votre cas, vous devriez le faire à l'intérieur de module.ts:
import jquery = module('./jquery-1.8.2');
N'oubliez pas de compiler avec --module AMD
car, par défaut, vous obtiendrez du code utilisant la fonction commonjs require
.