web-dev-qa-db-fra.com

Comment importer une bibliothèque js sans fichier de définition dans un fichier TypeScript

Je souhaite passer de JavaScript à TypeScript afin de faciliter la gestion du code à mesure que notre projet s'agrandit. Nous utilisons toutefois de nombreuses bibliothèques en tant que modules AMD, que nous ne souhaitons pas convertir en TypeScript.

Nous souhaitons toujours les importer dans des fichiers TypeScript, mais nous ne souhaitons pas non plus générer de fichiers de définition. Comment pouvons-nous y parvenir?

par exemple. Le nouveau fichier TypeScript:

/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');

Ici, lib/errorInfoHandler est un module AMD inclus dans une immense bibliothèque JavaScript que nous ne souhaitons pas toucher.

L'utilisation du code ci-dessus génère les erreurs suivantes:

Unable to resolve external module ''lib/errorInfoHandler'' 
Module cannot be aliased to a non-module type.

Cela devrait en fait produire le code suivant:

define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...

}

Existe-t-il un moyen d'importer une bibliothèque JavaScript dans TypeScript en tant que module AMD et de l'utiliser dans le fichier TypeScript sans créer de fichier de définition?

59
tune2fs

Une combinaison des 2 réponses données ici a fonctionné pour moi.

//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
   var noTypeInfoYet: any; // any var name here really
   export = noTypeInfoYet;
}

Je suis toujours nouveau dans TypeScript, mais il semblerait que ce soit simplement un moyen de dire à TypeScript de ne pas l'utiliser en exportant une variable fictive ne contenant aucune information de type.

MODIFIER

Il a été noté dans les commentaires de cette réponse que vous pouvez obtenir le même résultat en déclarant simplement:

//errorInfoHandler.d.ts
declare module "*";

Voir le commentaire de github ici .

24
Code Novitiate

Créez votre propre fichier de définition avec le contenu suivant:

declare module "lib/errorInfoHandler" {}

Et référencez ce fichier où vous voulez utiliser l'importation.

Ou ajoutez la ligne suivante en haut de votre fichier:

/// <AMD-dependency path="lib/errorInfoHandler">

Note: Je ne sais pas si ce dernier fonctionne toujours, c'est la façon dont j'ai initialement travaillé avec les dépendances AMD manquantes. Veuillez également noter qu'avec cette approche, vous ne disposerez pas d'IntelliSense pour ce fichier.

4
thomaux

Créez un fichier dans lib appelé errorInfoHandler.d.ts. Là, écris:

var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;

Maintenant, l'importation alert réussira et sera de type any.

1
Ryan Cavanaugh