Maszynopis - oddzielenie kodu wyjścia

głosy
1

Próbuję maszynopis i uważam, że to bardzo użyteczne.

Mam dość duży projekt i rozważa przepisanie go za pomocą maszynopis. Głównym problemem jest następujący:

złożyć A.ts:

class A extends B {
    // A stuff
}

złożyć B.ts:

class B {
    // B stuff
}

Jeśli mogę skompilować A.ts z tym poleceniem:

tsc --out compiledA.js A.ts

Wezmę błąd z kompilator bo on nie wie, jak groźba „B” po rozszerza.

Tak, „rozwiązanie” byłoby w tym A.ts (jako pierwszej linii kodu):

/// <reference path=./B.ts />

Kompilacja ponownie A.ts z tego samego polecenia

tsc --out compiledA.js A.ts

Spowoduje compiledA.js zawierających zarówno B.ts i kod A.ts. (Co może być bardzo ładne)

W moim przypadku wystarczy skompilować kod A.ts w pliku compiledA.js a ja nie chcę B.ts rzeczy się tam.

Rzeczywiście, co chcę jest:

  • TSC --out A.js A.ts => skompilować tylko rzeczy A.ts
  • TSC --out B.js B.ts => skompilować tylko rzeczy B.ts

Można to zrobić poprzez usunięcie „rozciąga” słowo kluczowe, ale robi to będę tracić większość dobroci maszynopis.

Może ktoś telll mnie, czy istnieje sposób, aby to zrobić?

Utwórz 03/10/2012 o 12:54
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

Po kilku badań okazało się, problem został wprowadzony przez --out argument w kompilator.

Rozwiązanie @silent__thought działa dobrze, jeśli chcemy mieć do czynienia z modułami. Jeśli nie trzeba użyć instrukcji require (spójrz na pytanie), a następnie skompilować „main.ts” plik withouth na --out argumentu

Odpowiedział 03/10/2012 o 20:27
źródło użytkownik

głosy
0

EDIT: Jak Andrea zwraca uwagę, jeśli pominąć --outparametr, który będzie uzyskać zachowanie oczekiwane, czyli żadna kombinacja plików źródłowych. Zostawię poniżej tego alternatywnego rozwiązania okrywać może pomóc komuś innemu.


Wierzę, że będzie trzeba użyć zewnętrznego modułu składni (CommonJS lub AMD), aby to zrobić.

Korzystanie z przykładem:

a.ts

import B = module("b")

class A extends B.B {
    // A stuff
}

b.ts

export class B {
    // B stuff
}

Skompilować tsc --out compiledA.js A.ts.

Powoduje a.jsimportowania b.jsprzy użyciu systemu CommonJS. Powstałe pliki wyglądać następująco:

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;
Odpowiedział 03/10/2012 o 14:59
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more