2015-11-03 5 views
0

Je suis coincé avec la bonne façon d'importer une bibliothèque JavaScript AMD (https://github.com/dcodeIO/bytebuffer.js) dans un fichier TypeScript.Importer une bibliothèque AMD JS dans un fichier TypeScript

J'ai trouvé sa définition de type - pas à jour - (https://github.com/SINTEF-9012/Proto2TypeScript/commit/0889dccbf6048f116551a73e77d75dd83553cfe6), mais en réalité je n'ai pas réussi à trouver un moyen de l'utiliser et de faire charger la bibliothèque par RequireJS.

Voici le code que je utilise:

/// <amd-dependency path="Scripts/bytebuffer" /> 
var ByteBuffer = require('Scripts/bytebuffer'); 

import protocols = require('protocols'); 

export class Pippo 
{ 
    readPayload(payload: ArrayBuffer, ECType: string): any 
    { 
     var ECStruct = new protocols.ECStruct(ECType); 

     var bb = new ByteBuffer() 
      .writeIString("Hello world!") 
      .flip(); 
     console.log(bb.readIString() + " from bytebuffer.js"); 
    } 
} 

Les deux modules protocoles et ByteBuffer sont correctement chargés, mais en fait je ne peux pas voir les membres de l'instance bb dans Visual Studio. Si je mets la ligne

/// <reference path="scripts/typings/bytebuffer/bytebuffer.d.ts" /> 

et commenter // var ByteBuffer = require ('scripts/ByteBuffer'); bien sûr, je peux voir les méthodes et les propriétés de bb, mais le module n'est pas chargé au moment de l'exécution.

Est-il possible d'avoir les ByteBuffer.js chargés par RequireJS avec la possibilité de voir ses membres dans VS?

Merci

+0

Je suis en train de m'en occuper moi-même avec la version la plus récente d'Angular2. Je tente d'inclure une bibliothèque javascript basée sur AMD (sans npm) et je passe un temps inhabituel à le faire fonctionner. C'est incroyable comme il y a peu d'informations pour le faire correctement - tout semble être un hack et fait des suppositions sur l'utilisation de SystemJS, etc. J'ai trouvé cette page de Typescript mais je ne suis toujours pas là. Peut-être que ça va t'aider. https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html – henry74

Répondre

1

Il y a une syntaxe pour déclarer l'interface de modules externes:

declare module 'amd/module/name' { 
    // module definition, probably with: 
    exports = thingToExport; 
} 

Dans votre cas, il devrait probablement être:

declare module 'Scripts/bytebuffer' { 
    exports = ByteBuffer; 
} 

Mettre cela après la ByteBuffer. d.ts fichier !!! Voir aussi "Ecriture de fichiers .d.ts" dans le handbook.

Dans mon cas, les choses /// <amd-dependency> et /// <reference> étaient également redondantes - vous pouvez aussi essayer, pour simplifier votre code.