javascript - Hur exporterar man bara en klass (som använder en annan klass) i TypeScript (CommonJS)?


Jag implementerade en "Least Recently Used Cache" (LRU Cache) med hjälp av en dubbellänklad lista. Den länkade listan består av noder (Node-klass) som används inom en LRUCache-klass.

För att exportera min modul använder jag följande mönster:

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

Jag exporterar min modul som en CommonJS-modul. Med mönstret export class ovan kan jag använda min modul på följande sätt:

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

Det är okej, men jag gillar inte den extra "module."-delen framför LRUCache. Jag skulle vilja använda min CommonJS exporterade modul så här:

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

Så jag ändrade min kod till detta:

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

Men nu klagar TypeScript med:

fel TS4055: Returtyp för offentlig metod från exporterad klass har eller använder privat namn 'Node'.

Det är för att LRUCache använder Node-klassen och Node exporteras inte när man definierar export=LRUCache;.

Hur kan jag lösa denna situation? Jag använder TypeScript 2.1.

Skärmdump:

Svar #1

Med TypeScript kan du enkelt göra:

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

Och det kommer att kompileras till:

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

Om du föredrar att använda require, kan du:

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

export = LRUCache;

Och sedan:

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

Du kan hitta mycket mer information om detta på följande två dokumentsidor:

  • Modulupplösning
  • Moduler