如何在TypeScript(CommonJS)中只导出一个类(使用另一个类)?

时间:2016-12-18 21:14:53

标签: javascript typescript module export commonjs

我实施了一个"最近最少使用的缓存" (LRU Cache)使用双向链表。链表由Node类中使用的节点(LRUCache类)组成。

要导出我的模块,我使用以下模式:

export class Node { ... }
export class LRUCache { ... }

我将我的模块导出为CommonJS模块。使用上面的export class模式,我可以通过以下方式使用我的模块:

var module = require('lru-cache');
var cache = new module.LRUCache();

没关系,但我不喜欢额外的" module."部分在LRUCache前面。我想像我这样使用我的CommonJS导出模块:

var LRUCache = require('lru-cache');
var cache = new LRUCache();

所以我将代码改为:

class Node { ... }
class LRUCache { ... }
export = LRUCache;

但现在TypeScript抱怨:

  

错误TS4055:导出类的公共方法的返回类型具有或正在使用私有名称'节点'。

这是因为LRUCache使用了Node类,并且在定义Node时未导出export = LRUCache;

我该如何解决这种情况?我正在使用TypeScript 2.1。

截图:

Error

1 个答案:

答案 0 :(得分:1)

使用打字稿,你可以做到:

import { LRUCache } from "lru-cache";
let cache = new LRUCache();

它将编译成:

var lru_cache_1 = require("./lru-cache");
var cache = new lru_cache_1.LRUCache();

如果您更喜欢使用require,则可以:

class Node { ... }
class LRUCache { ... }

export = LRUCache;

然后:

import LRUCache = require('lru-cache');
var cache = new LRUCache();

您可以在以下两个文档页面中找到更多相关信息: