TypeScript uklanjanje duplikata extends


Ja razdvajam svoje TypeScript aplikacije u više datoteka, obično po jednu za svaku klasu. Kada objavim svoju aplikaciju, spajam ih i minimiziram u jednu datoteku. Problem koji imam je što se TypeScript generirana funkcija __extends stavlja u svaku kompiliranu JavaScript datoteku. Tako završi s više kopija istog koda u konačnom proizvodu.

Postoji li način da se kompajleru kaže da funkciju __extends stavi samo u jednu JavaScript datoteku? Postoji li neko drugo rješenje?

Odgovor #1

Jedno rješenje bilo bi spojiti izlaz u jednu datoteku putem TypeScript kompajlera:

tsc --out final.js app.ts

Tada biste mogli minimizirati final.js, koji bi trebao imati samo jednu extends funkciju.

Odgovor #2

Opcija kombiniranja izlaza u datoteku je izvrsna, ali nije podržana u svim verzijama i svim verzijama modula.
Kako biste to zaobišli, možete koristiti opciju kompajlera noEmitHelpers kako biste uklonili pomoćnu funkciju i napisali vlastitu u zasebnoj datoteci.

Trebali biste stvoriti novu datoteku emitHelperFile.js koja će sadržavati funkciju extend.

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};

I izostavite ga iz generiranog izlaza kompajlera

tsc app.ts --noEmitHelpers 

Više opcija kompajlera možete provjeriti ovdje https://www.typescriptlang.org/docs/handbook/compiler-options.html