2015-11-03 73 views
0

我一直坚持用正确的方式将一个AMD JavaScript库(https://github.com/dcodeIO/bytebuffer.js)导入到TypeScript文件中。在TypeScript文件中导入AMD JS库

我发现它的 - 不是最新的类型定义(https://github.com/SINTEF-9012/Proto2TypeScript/commit/0889dccbf6048f116551a73e77d75dd83553cfe6),但实际上我无法找到一种方法来使用它并让该库被RequireJS加载。

这是我使用的代码:

/// <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"); 
    } 
} 

两个模块协议字节缓冲区正确加载,但实际上我无法看到的实例BB的成员在Visual Studio。如果我放线

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

和评论 // VAR字节缓冲区=需要( '脚本/字节缓冲区'); 当然我可以看到bb的方法和属性,但该模块在运行时不会被加载。

有没有办法有ByteBuffer.js通过RequireJS装载看到它在VS成员的可能性?

感谢

+0

我正在通过这个自己的Angular2的最新版本。我试图包括一个基于AMD的JavaScript库(没有npm),我花了不寻常的时间让它工作。真正令人惊讶的是,很少有信息能够正确地做到这一点 - 所有东西都像是黑客攻击,并且使用SystemJS等做了一些假设。我确实从Typescript找到了这个页面,但我仍然不在那里。也许它会帮助你。 https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html – henry74

回答

1

有宣告外部模块的接口语法:

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

在你的情况下,也许应该是:

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

字节缓冲区后,将这个。 d.ts文件!另请参阅handbook中的“写入.d.ts文件”。

在我的情况下,/// <amd-dependency>/// <reference>的东西也是多余的 - 您可能也想尝试一下,以简化您的代码。