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
