我正在尝试在 NodeJS 中使用来自 typescript-collections 的 Dictionary 类:
/// <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
有人知道这是怎么回事吗? 我也非常高兴能够替代更好的 TS 集合库...
您遇到了内部模块与外部模块问题。
TypeScript Collections 库被编写为内部模块——一个标准 JavaScript 文件,您可以将其放入网页中的
script
标签中。
然而,Node 的
require
需要一个与 CommonJS 兼容的文件,它将向 exports
分配一些内容,换句话说,是一个 外部模块。发生的情况是,node.js 找到 collections.js
,执行它,并通过评估文件返回 exports
对象。因为它只是一个普通的 JS 文件,所以导出的对象是 {}
-- 空。
最好的解决办法是:
collections.ts
的引用替换为 1 到 collections.d.ts
(运行 tsc --d collection.ts
来生成此文件)eval(require('fs').readFileSync('./path/to/file.js', 'utf8'));