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?

War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top