سؤال

أحاول الكتابة على الآلة الكاتبة وأجدها مفيدة جدًا.

لدي مشروع كبير جدًا وكنت أفكر في إعادة كتابته باستخدام الآلة الكاتبة.المشكلة الرئيسية هنا هي ما يلي:

ملف أ.تس:

class A extends B {
    // A stuff
}

ملف بي تي اس:

class B {
    // B stuff
}

إذا قمت بتجميع A.ts باستخدام هذا الأمر:

tsc --out compiledA.js A.ts

سأحصل على خطأ من المترجم لأنه لا يعرف كيفية تهديد "B" بعد التمديد.

لذلك، سيكون "الحل" هو تضمين A.ts (كالسطر الأول من التعليمات البرمجية):

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

تجميع A.ts مرة أخرى بنفس الأمر

tsc --out compiledA.js A.ts

سينتج عنه CompiledA.js الذي يحتوي على كود B.ts وA.ts.(والتي يمكن أن تكون لطيفة جداً)

في حالتي، أحتاج فقط إلى تجميع كود A.ts في الملف compildA.js ولا أريد أن تكون عناصر B.ts موجودة هناك.

والحقيقة أن ما أريده هو:

  • tsc --out A.js A.ts => قم بتجميع عناصر A.ts فقط
  • tsc --out B.js B.ts => قم بتجميع عناصر B.ts فقط

يمكنني القيام بذلك عن طريق إزالة الكلمة الأساسية "يمتد" ولكن القيام بذلك سأفقد معظم جودة الكتابة المطبوعة.

هل يمكن لأحد أن يخبرني إذا كانت هناك طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

بعد بعض الأبحاث، اكتشفت المشكلة من قبل حجة الشرب في المترجم.

silent__، يعمل الحل على ما يرام إذا كنت ترغب في التعامل مع الوحدات النمطية.إذا لم تكن ستحتاج إلى استخدام عبارة الطلب (انظر إلى السؤال)، ثم قم بتجميع ملف "Main.ts" مع الحجة -

نصائح أخرى

يحرر: كما يشير أندريا، إذا قمت بحذف --out المعلمة سوف تحصل على السلوك المتوقع، أي.لا يوجد مزيج من الملفات المصدر.سأترك هذا الحل البديل أدناه في حالة أنه يمكن أن يساعد شخصًا آخر.


أعتقد أنه سيتعين عليك استخدام بناء جملة الوحدة الخارجية (CommonJS أو AMD) للقيام بذلك.

باستخدام المثال الخاص بك:

أ.تس

import B = module("b")

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

b.ts

export class B {
    // B stuff
}

جمع مع tsc --out compiledA.js A.ts.

وينتج عنه a.js import b.js باستخدام نظام CommonJS.تبدو الملفات الناتجة كما يلي:

أ.تس

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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top