NodeJS、TypeScript 和 typescript 集合

问题描述 投票:0回答:1

我正在尝试在 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 集合库...

node.js collections typescript
1个回答
0
投票

您遇到了内部模块与外部模块问题。

TypeScript Collections 库被编写为内部模块——一个标准 JavaScript 文件,您可以将其放入网页中的

script
标签中。

然而,

Node 的

require
需要一个与 CommonJS 兼容的文件,它将向
exports
分配一些内容,换句话说,是一个 外部模块。发生的情况是,node.js 找到
collections.js
,执行它,并通过评估文件返回
exports
对象。因为它只是一个普通的 JS 文件,所以导出的对象是
{}
-- 空。

最好的解决办法是:

  1. 为了正确起见,将对
    collections.ts
    的引用替换为 1 到
    collections.d.ts
    (运行
    tsc --d collection.ts
    来生成此文件)
  2. 使用一些解决方案在节点中加载“vanilla”JS文件。一个好的俏皮话(来自链接的问题)是
    eval(require('fs').readFileSync('./path/to/file.js', 'utf8'));
© www.soinside.com 2019 - 2024. All rights reserved.