2016-12-18 4 views
1

Ich implementierte einen "Least Recently Used Cache" (LRU Cache) mit einer doppelt verknüpften Liste. Die verkettete Liste besteht aus Knoten (Node Klasse), die innerhalb einer LRUCache Klasse verwendet werden.Wie exportiert man nur eine Klasse (die eine andere Klasse verwendet) in TypeScript (CommonJS)?

mein Modul exportieren wir folgendes Muster verwenden:

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

ich mein Modul als Commonjs Modul am Export. Mit dem export class Muster oben, ich bin in der Lage meines Modul die folgende Art und Weise zu nutzen:

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

die in Ordnung, aber ich weiß nicht wie die zusätzlichen „module.“ -Teil vor LRUCache. Ich möchte meine Commonjs exportiert Modul wie folgt verwenden:

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

Also änderte ich meinen Code in diese:

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

Aber jetzt Typoskript klagt mit:

Fehler TS4055: Die Rückkehr Der Typ der öffentlichen Methode aus der exportierten Klasse hat oder verwendet den privaten Namen 'Knoten'.

Es ist, weil LRUCache verwendet die Node Klasse und Node wird nicht exportiert, wenn export = LRUCache; definieren.

Wie kann ich diese Situation lösen? Ich verwende TypeScript 2.1.

Screenshot:

Error

Antwort

1

Mit Typoskript können Sie einfach tun:

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

Und es wird kompilieren in:

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

Wenn Sie es vorziehenzu verwenden, können Sie:

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

export = LRUCache; 

Und dann:

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

Sie können viel mehr Informationen zu diesem Thema in den folgenden zwei doc Seiten finden:

+0

Tha Danke, dass du mir geholfen hast, aber das habe ich oben erklärt. Das Problem ist, dass ich den 'Klasse Knoten {...} Klasse LRUCache {...} export = LRUCache;' Code mit TypeScript nicht kompilieren kann, weil damit nur 'LRUCache' exportiert wird und eine Klasse verwendet, die nicht exportiert wird ('Node') und TypeScript mag das nicht. –

+0

Sorry, verpasst es. Aber was ist los mit dem ersten Ansatz von 'import {LRUCache} aus" lru-cache "'? –

+0

Kein Problem. Die Sache ist, dass ich meine LRUCache (in TS geschrieben) nicht mit TypeScript verwenden möchte. Ich möchte es in JavaScript kompilieren, damit ich es in einer Node.js-Anwendung verwenden kann (die auf JavaScript von Vanilla basiert). –

Verwandte Themen