node.js - NodeJS,打字和打字收集

  显示原文与译文双语对照的内容
112 3

我尝试在NodeJS中使用来自 typescript集合的字典类:


///<reference path="../../../scripts/collections.ts"/>
var collections = require('../../../scripts/collections');

export class AsyncProcessorCommand implements interfaces.IAsyncProcessorCommand
{
 public static Type = 'RabbitMon.AsyncProcessorCommand:RabbitMon';
 public GetType = () => 'RabbitMon.AsyncProcessorCommand:RabbitMon';

 public ID: string;

 constructor(public Action: string, public Arguments?: collections.Dictionary<string, string>) {
 this.ID = uuid.v4();

 this.Arguments = new collections.Dictionary<string, string>();
//I've also tried the following
//this.Arguments = new collections.Dictionary<string, string>((key: string) => sha1(key));
 }
}

但是,我在 new Dictionary 上一直出现以下错误:


TypeError: undefined is not a function

谁知道这里发生了什么? 我也非常乐意替换一个更好的working集合库。

时间: 原作者:

71 0

你有一个内部 vs 外部模块插件问题。

TypeScript集合库 is 内部模块 -- a 标准JavaScript文件that你可以直接放入网页中的script 标签。

然而,节点的require 需要一个commonjs兼容文件,它将分配给 exports,换句话说,一个外部模块 。 发生的事情是 node.js 找到 collections.js,执行它,然后返回 exports 对象,从评估文件中返回。 因为它只是一个普通的JS文件,所以导出的对象是 {} --空的。

最好的修复方法是:

  1. 为了正确( 运行 tsc --d collection.ts 生成这个文件),用一个到 collections.d.ts的引用替换了 collections.ts
  2. 在节点中使用某些解决方案加载"香草"js文件。 一个好的liner ( 从链接的问题中) eval(require('fs').readFileSync('./path/to/file.js', 'utf8'));
原作者:
...