Destinazione - Separazione dell'output del codice
-
13-12-2019 - |
Domanda
Sto provando dattiloscritto e lo trovo molto utile.
Ho un progetto piuttosto grande e stavo considerando di riscriverlo usando i dattiloscritti. Il problema principale qui è il seguente:
File A.TS:
class A extends B {
// A stuff
}
.
File B.TS:
class B {
// B stuff
}
.
Se compilo A.TS con questo comando:
tsc --out compiledA.js A.ts
.
Otterrò errori dal compilatore perché non sa come minacciare la "B" dopo la prolunga.
Allora, una "soluzione" sarebbe inclusa in A.TS (come prima linea di codice):
/// <reference path="./B.ts" />
.
Compilazione di nuovo A.TS con lo stesso comando
tsc --out compiledA.js A.ts
.
si tradurrà in compileda.js contenente sia il codice B.TS e A.TS. (che potrebbe essere molto bello)
Nel mio caso, ho solo bisogno di compilare il codice A.TS nel file compileda.js e non voglio che le cose B.TS siano lì dentro.
In effetti, quello che voglio è:
- .
- TSC --Out A.JS A.TS=> Compila solo la roba A.TS
- TSC --OUT B.JS B.TS=> Compila solo la roba B.TS
Posso farlo rimuovendo la parola chiave "estende" ma facendo che perderò la maggior parte della bontà dattilgitrice.
Qualcuno può raccontarmi se c'è un modo per farlo?
Soluzione
Dopo alcune ricerche ho scoperto che il problema è stato introdotto dall'argomento --out nel compilatore.
@Silent__Questa soluzione funziona bene se vuoi affrontare i moduli.Se non è necessario utilizzare la Dichiarazione Richiesta (guarda la domanda) e compilare il file "Main.ts" con l'argomentoout argomento
Altri suggerimenti
Modifica: Come Andrea sottolinea, se si omette il parametro --out
riceverai il comportamento previsto, I.e. Nessuna combinazione di file sorgente.Lascerò questa soluzione alternativa sotto Incase può aiutare qualcun altro.
.
Credo che dovrai usare la sintassi del modulo esterno (Commonjs o AMD) per farlo.
Usando il tuo esempio:
A.ts
import B = module("b")
class A extends B.B {
// A stuff
}
.
b.ts
export class B {
// B stuff
}
.
Compilare con tsc --out compiledA.js A.ts
.
Ciò risulta in a.js
Importing b.js
utilizzando il sistema CommonJS.I file risultanti assomigliano a questo:
A.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.ts
var B = (function () {
function B() { }
return B;
})();
exports.B = B;
.