TypoSkript - trennende Codeausgabe
-
13-12-2019 - |
Frage
ich versuche Typescript und finde es sehr nützlich.
Ich habe ein ziemlich großes Projekt und habe überlegt, es mit Typescript umzuschreiben.Das Hauptproblem hier ist das Folgende:
dateiendung A.ts:
class A extends B {
// A stuff
}
dateiendung B.ts:
class B {
// B stuff
}
Wenn ich A.ts mit diesem Befehl kompiliere:
tsc --out compiledA.js A.ts
Ich werde eine Fehlermeldung vom Compiler erhalten, weil er nicht weiß, wie er das "B" nach der Erweiterung bedrohen soll.
Also, eine "Lösung" würde in A.ts (als erste Codezeile) enthalten sein:
/// <reference path="./B.ts" />
A.ts mit demselben Befehl erneut kompilieren
tsc --out compiledA.js A.ts
Wird zu compiledA führen.js enthält sowohl B.ts- als auch A.ts-Code.(was sehr schön sein könnte)
In meinem Fall muss ich nur den A.ts-Code in der compiledA kompilieren.js-Datei und ich möchte nicht, dass das B.ts-Zeug da drin ist.
In der Tat, was ich will, ist:
- tsc --out A.js A.ts => kompiliere nur das A.ts Zeug
- tsc --out B.js B.ts => kompiliere nur das B.ts Zeug
Ich kann es tun, indem ich das Schlüsselwort "extends" entferne, aber dadurch verliere ich den größten Teil der Typoskript-Güte.
Kann mir jemand sagen, ob es einen Weg gibt, dies zu tun?
Lösung
Nach einiger Recherche habe ich herausgefunden, dass das Problem durch das --out-Argument im Compiler eingeführt wurde.
@silent__thought-Lösung funktioniert gut, wenn Sie mit Modulen umgehen möchten.Wenn Sie nicht sind, müssen Sie die erforderliche Anweisung verwenden (an die Frage anpassen) und kompilieren Sie dann die Datei "main.ts", ohne das argument
Andere Tipps
BEARBEITEN: Wie Andrea betont, wenn Sie das weglassen --out
parameter erhalten Sie das erwartete Verhalten, d.h.keine Kombination von Quelldateien.Ich werde diese alternative Lösung unten belassen, falls sie jemand anderem helfen kann.
Ich glaube, Sie müssen dazu die externe Modulsyntax (CommonJS oder AMD) verwenden.
Verwenden Sie Ihr Beispiel:
ein.ts
import B = module("b")
class A extends B.B {
// A stuff
}
b.z
export class B {
// B stuff
}
Kompilieren mit tsc --out compiledA.js A.ts
.
Dies führt zu a.js
importieren b.js
verwenden des CommonJS-Systems.Die resultierenden Dateien sehen folgendermaßen aus:
ein.ts
var __extends = this.__extends || function (d, b) {
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
}
var B = require("./b")
var A = (function (_super) {
__extends(A, _super);
function A() {
_super.apply(this, arguments);
}
return A;
})(B.B);
b.z
var B = (function () {
function B() { }
return B;
})();
exports.B = B;