Wie zu verwenden namespaces, mit import in Typoskript
Habe ich zwei Klassen in zwei getrennten Dateien und erstreckt sich von den anderen. Die base-Klasse enthält einige import
- Anweisungen verwenden von node-Modulen. Es ist mir unklar, warum die abgeleitete Klasse (die ist in einer separaten Datei) erkennt nicht die base-Klasse!!!!!???
Kann jemand klären das bitte?
//UtilBase.ts
///<reference path="../typings/node.d.ts" />
///<reference path="../typings/packages.d.ts" />
import * as path from "path"; //<---- THIS LINE BREAKS THE BUILD!!!!
namespace My.utils {
export class UtilBase {
protected fixPath(value: string): string {
return value.replace('/', path.sep);
}
}
}
Dann
//UtilOne.ts
///<reference path="UtilBase.ts" />
namespace My.utils {
export class UtilOne extends My.utils.UtilBase {
}
}
Nach dem kompilieren bekomme ich:
src/UtilOne.ts(6,47): error TS2339: Property 'UtilBase' does not
exist on type 'typeof utils'
Siehe auch: stackoverflow.com/questions/37295778/...
Ich bin nicht sicher, wo die Antwort vielleicht in der post, aber vielen Dank für die Beantwortung.
Ich bin nicht sicher, wo die Antwort vielleicht in der post, aber vielen Dank für die Beantwortung.
InformationsquelleAutor gevik | 2016-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Lösung mit namespaces (nicht empfohlen)
Um Ihr Problem zu beheben, exportieren Sie Ihre namespace:
Dann, Sie sollten in der Lage sein, um es zu importieren:
Jedoch, wenn der Zweck ist, den code zu organisieren, ist es eine schlechte Praxis zu verwenden namespaces und (ES6) Module zur gleichen Zeit. Mit Node.js Ihre Dateien sind Module, dann sollten Sie vermeiden namespaces.
Verwenden ES6-Module ohne namespaces
Typoskript unterstützt die syntax von ES6-Modulen sehr gut:
Es ist der empfohlene Weg. ES6-Module Vermeidung von Namenskonflikten mit der Fähigkeit, benennen Sie jede importierte Ressource.
Wird es funktionieren auf Node.js (mit der
commonjs
Modul-syntax in compiler-Optionen).Für eine gute Einführung in die ES6-Module syntax, Lesen Sie diesen Artikel.
Verwenden Sie eine Datei
tsconfig.json
statt///<reference
Hinweis: Die syntax
///<reference
wird ersetzt durch die Dateitsconfig.json
. Ein Beispiel für Node.js:Sehr nützliche info.
Wie können Sie beweisen, dass
it is a bad practice to use namespaces and (ES6) modules at the same time
?href="https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html#needless-namespacing" >In der Typoskript-Handbuch: "um Zu bekräftigen, warum Sie sollten nicht versuchen, namespace-Modul Inhalte, die Allgemeine Idee der Verwendung von Namensräumen ist es, sorgen für die logische Gruppierung von Konstrukten und zur Verhinderung von Namenskollisionen. Da die Modul-Datei selbst ist bereits eine logische Gruppierung, und Ihre top-level-name definiert ist, durch die code, der Importe, es ist unnötig, um ein zusätzliches Modul-Schicht exportierten Objekten."
Danke.
InformationsquelleAutor Paleo