Γραφομηχανή: καθορίζουν την κατηγορία και τις μεθόδους της, σε ξεχωριστά αρχεία

ψήφοι
4

Είναι δυνατόν να δηλώσει μια τάξη σε ένα αρχείο και να καθορίσει τις μεθόδους του σε ξεχωριστά αρχεία;

Έχω κάποιες τάξεις με πολλές μεθόδους και θα ήταν μεγάλο εάν θα μπορούσα να τους απλώνονται λίγο.

Δημοσιεύθηκε 03/10/2012 στις 11:10
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
6

Σύντομη απάντηση: γραφομηχανή δεν υποστηρίζει κατάτμηση ορισμό τάξη σε πολλά αρχεία.

Εναλλακτικός τρόπος αντιμετώπισης : Μπορείτε να ορίσετε μια διεπαφή που περιέχουν τα μέλη για την κατηγορία, και δύο διαφορετικές κατηγορίες εφαρμογή της εν λόγω διεπαφής. Στη συνέχεια Μίχίη ακίνητα από τη μία κατηγορία στην άλλη, για να κάνει μια συνδυασμένη τάξη. Για παράδειγμα:

LargeClass.a.ts

interface LargeClass {
   methodA(): string;
   methodB(): string;
}

class LargeA implements LargeClass {
   methodA: () => string; // not implemented, needed since otherwise we don't extend LargeClass
   methodB() {
     return "Hello world";
   }
}

LargeClass.b.ts

class LargeB implements LargeClass {
   methodA() {
     return "Foo";
   }
   methodB: () => string; // not implemented, needed since otherwise we don't extend LargeClass
}

Usage.ts

// Using underscore's extend to copy implementation from A to B
var c:LargeClass = _.extend(new LargeA(), new LargeB());

// Manually mixing in a to b
var a = new LargeA();
var b:LargeClass = new LargeB();
for (var prop in a) {
    b[prop]=a[prop];
}

Αυτό δεν θα λειτουργήσει εάν χρειάζεστε κατασκευαστές για την κατηγορία, όμως. Και πραγματικά είναι αναντίστοιχο ... Η λύση, εντούτοις :)

Ω, από τον τρόπο, αυτό λειτουργεί γιατί γραφομηχανή δεν εκπέμπει unitialised δηλώσεις τύπος ακινήτου / πεδίου για τις κατηγορίες - αυτό τα χρησιμοποιεί μόνο για τον έλεγχο τύπου.

Αντιλαμβάνομαι επίσης ότι μπορείτε να το κάνετε αυτό χωρίς διασυνδέσεις και μόλις το κατασκεύασμα τάξη σε μια πιο όμορφη τρόπο ... Θα αφήσει πώς να το κάνουμε αυτό ως μια άσκηση για τους αναγνώστες για την ώρα ...

Απαντήθηκε 03/10/2012 στις 11:38
πηγή χρήστη

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