Μια σύγκρουση ονομασίας συμβαίνει όταν δύο ή περισσότερα στοιχεία κώδικα χρησιμοποιούν το ίδιο όνομα για μια μεταβλητή, συνάρτηση ή κλάση. Είναι κοινά σε μεγάλα έργα όπου πολλοί άνθρωποι εργάζονται στην ίδια βάση κωδικών. Μπορούν να δυσκολέψουν τον προσδιορισμό ποιο στοιχείο κώδικα είναι υπεύθυνο για σφάλματα.
Χρησιμοποιώντας χώρους ονομάτων, μπορείτε να οργανώσετε και να διαχειριστείτε τον κώδικά σας έτσι ώστε ομάδες σχετικών στοιχείων να βρίσκονται κάτω από ένα κοινό αναγνωριστικό. Αυτό θα μετριάσει τον κίνδυνο συγκρούσεων ονοματολογίας.
Δημιουργία χώρου ονομάτων
Μπορείτε να δημιουργήσετε χώρους ονομάτων στο TypeScript χρησιμοποιώντας το χώρο ονομάτων λέξη-κλειδί. Ακολουθήστε το με ένα αναγνωριστικό για να ονομάσετε τον χώρο ονομάτων και ένα μπλοκ που περικλείεται από σγουρά άγκιστρα. Η σύνταξη είναι παρόμοια με αυτή που θα χρησιμοποιούσατε δημιουργήστε μια τάξη σε JavaScript.
Για παράδειγμα:
χώρο ονομάτων Παράδειγμα {}
Στη συνέχεια, μπορείτε να δηλώσετε μέλη του χώρου ονομάτων—μεταβλητές, συναρτήσεις και κλάσεις—μέσα στο μπλοκ χώρου ονομάτων:
χώρο ονομάτων Παράδειγμα {
εξαγωγήλειτουργίαFoo(): κενός{
κονσόλα.κούτσουρο("Αυτή είναι μια συνάρτηση μέσα στον χώρο ονομάτων του παραδείγματος");
}εξαγωγήτάξη Μπαρ {
ιδιοκτησία: σειρά;κατασκευαστής(ιδιοκτησία: σειρά) {
Αυτό.περιουσία = ιδιοκτησία;
}
}
εξαγωγήσυνθ baz = "Αυτή είναι μια μεταβλητή χώρου ονομάτων"
}
Στο παραπάνω παράδειγμα, Foo, Μπαρ, και baz είναι μέλη του Παράδειγμα χώρο ονομάτων. Από προεπιλογή, μπορείτε να έχετε πρόσβαση μόνο στα μέλη ενός χώρου ονομάτων εντός του ίδιου χώρου ονομάτων. Χρησιμοποιήστε το εξαγωγή λέξη-κλειδί για να κάνετε κάθε μέλος του χώρου ονομάτων προσβάσιμο εκτός αυτού.
Μπορείτε να αποκτήσετε πρόσβαση σε όλα τα δημόσια διαθέσιμα μέλη ενός χώρου ονομάτων καλώντας το όνομα μέλους του χώρου ονομάτων χρησιμοποιώντας σημειογραφία κουκκίδων:
Example.foo(); // Αυτή είναι μια συνάρτηση μέσα στον χώρο ονομάτων Παράδειγμα
συνθ μπάρα = νέος Παράδειγμα. Μπαρ("σειρά");
κονσόλα.log (bar.property); // συμβολοσειρά
κονσόλα.log (Παράδειγμα.baz); // Αυτή είναι μια μεταβλητή χώρου ονομάτων
Ένθεση χώρων ονομάτων
Το TypeScript σάς επιτρέπει να ενσωματώνετε χώρους ονομάτων μέσα σε άλλους χώρους ονομάτων για να δημιουργήσετε μια ιεραρχική δομή για τον κώδικά σας. Οι ένθετοι χώροι ονομάτων μπορούν να μειώσουν περαιτέρω τους κινδύνους συγκρούσεων ονομασίας ομαδοποιώντας τους σχετικούς χώρους ονομάτων κάτω από ένα κοινό αναγνωριστικό.
Για παράδειγμα:
χώρο ονομάτων Παράδειγμα {
εξαγωγήσυνθ ιδιοκτησία_1 = "Φου";εξαγωγήχώρο ονομάτων Μπαρ {
εξαγωγήσυνθ printFoo = λειτουργία () {
κονσόλα.log (ιδιότητα_1);
};
}εξαγωγήχώρο ονομάτων Μπαζ {
εξαγωγήτάξη Foo {
ιδιοκτησία: σειρά;
κατασκευαστής(ιδιοκτησία: σειρά) {
Αυτό.περιουσία = ιδιοκτησία;
}
}
}
}
Το μπλοκ κώδικα παραπάνω παρέχει ένα παράδειγμα ένθετου χώρου ονομάτων. ο Παράδειγμα Ο χώρος ονομάτων είναι ο χώρος ονομάτων ανώτατου επιπέδου, που περιέχει το Μπαρ namespace και το Μπαζ χώρο ονομάτων.
Μπορείτε να αποκτήσετε πρόσβαση στις ιδιότητες σε έναν ένθετο χώρο ονομάτων χρησιμοποιώντας σημειογραφία κουκκίδων που ακολουθεί την ιεραρχική δομή που δημιουργήσατε.
Για παράδειγμα:
κονσόλα.log (Example.property_1); // Φου
Παράδειγμα. Bar.printFoo() // Φου
συνθ foo = νέος Παράδειγμα. Μπαζ. Foo("παράδειγμα")
Αυτό το παράδειγμα κώδικα έχει πρόσβαση σε κάθε μέλος του χώρου ονομάτων μέσω του γονικού χώρου ονομάτων. Η απευθείας πρόσβαση σε μια ιδιότητα, αντί μέσω του γονικού χώρου ονομάτων της, θα δημιουργούσε ένα σφάλμα:
Example.printFoo()
// σφάλμα TS2339: Η ιδιότητα 'printFoo' δεν υπάρχει στον τύπο 'typeof Example'
Αν και οι ένθετοι χώροι ονομάτων μπορούν να σας βοηθήσουν να οργανώσετε τον κώδικά σας, οι βαθιά ένθετοι χώροι ονομάτων ενδέχεται να έχουν το αντίθετο αποτέλεσμα. Οι βαθιά ένθετοι χώροι ονομάτων κάνουν τον κώδικά σας πιο δύσκολο στην ανάγνωση και τη συντήρηση.
Ψευδώνυμα χώρου ονομάτων
Ένα ψευδώνυμο χώρου ονομάτων είναι ένα συντομευμένο όνομα που δίνεται σε ένα μέλος του χώρου ονομάτων, το οποίο διευκολύνει την αναφορά.
Μπορείτε να δημιουργήσετε ένα ψευδώνυμο χώρου ονομάτων χρησιμοποιώντας το εισαγωγή λέξη-κλειδί ακολουθούμενη από το όνομα που θέλετε να αντιστοιχίσετε στο ψευδώνυμο. Στη συνέχεια, εκχωρήστε το εισαγωγή λέξη-κλειδί και το ψευδώνυμο σε ένα μέλος χώρου ονομάτων.
Για παράδειγμα:
χώρο ονομάτων αυτοκίνητο {
εξαγωγήχώρο ονομάτων Tesla {
εξαγωγήτάξη ModelX {
δημιουργώ(): Σειρά {
ΕΠΙΣΤΡΟΦΗ«Το μοντέλο X δημιουργήθηκε».
}
}
}εξαγωγήχώρο ονομάτων Toyota {
εξαγωγήτάξη Camry {}
}εξαγωγήχώρο ονομάτων Ford {
εξαγωγήτάξη Mustang {}
}
}// Δημιουργία του ψευδώνυμου
εισαγωγή tesla = Αυτοκίνητο. Tesla
συνθ μοντέλοΧ = νέος tesla. ModelX()
modelX.create() // Δημιουργήθηκε το μοντέλο X
Αυτό το παράδειγμα δημιουργεί ένα ψευδώνυμο για το Αυτοκίνητο. Tesla χώρο ονομάτων. Μπορείτε να χρησιμοποιήσετε αυτό το ψευδώνυμο για να αποκτήσετε πρόσβαση στις ιδιότητες του Tesla namespace, όπως η κατηγορία ModelX, πιο εύκολα.
Χρήση χώρων ονομάτων σε πολλά αρχεία
Για να χρησιμοποιήσετε έναν χώρο ονομάτων σε διαφορετικό αρχείο, πρέπει να τον εισαγάγετε. Η εισαγωγή χώρων ονομάτων διαφέρει από την εισαγωγή μεταβλητών, συναρτήσεων, κλάσεων κ.λπ. Ανάλογα με το έργο σας σύστημα μονάδας, μπορείτε να τα εισαγάγετε χρησιμοποιώντας είτε το απαιτώ ή το εισαγωγή λέξη-κλειδί.
Ωστόσο, μπορείτε να εισαγάγετε χώρους ονομάτων μόνο χρησιμοποιώντας την οδηγία τριπλής κάθετο, η οποία είναι ένα σχόλιο μίας γραμμής που περιέχει μια ετικέτα XML.
Για παράδειγμα:
// κύρια.τσ
///
Example.foo()
Αυτό το παράδειγμα χρησιμοποιεί την οδηγία τριπλής κάθετο μέσα στο a κύρια.τς αρχείο. Η οδηγία αναφέρεται στην ευρετήριο.τσ αρχείο, το οποίο περιέχει το Παράδειγμα χώρο ονομάτων. Χωρίς εισαγωγή, ο χώρος ονομάτων είναι διαθέσιμος μόνο στο ίδιο αρχείο που τον ορίζει.
Μετά από αναφορά στο ευρετήριο.τσ αρχείο, μπορείτε να έχετε πρόσβαση στο Παράδειγμα namespace και τα δημόσια διαθέσιμα μέλη του. Για παράδειγμα, μπορείτε να καλέσετε το foo μέθοδος στο Παράδειγμα χώρο ονομάτων.
Μόλις χρησιμοποιήσετε πολλά αρχεία, θα πρέπει να βεβαιωθείτε ότι το TypeScript μεταγλωττίζει και φορτώνει όλο τον απαραίτητο κώδικα. Μπορείτε να το κάνετε συνενώνοντας την έξοδο από τον μεταγλωττιστή TypeScript χρησιμοποιώντας το outFile επιλογή. Αυτό θα μεταγλωττίσει όλα τα αρχεία εισόδου σε ένα μόνο αρχείο εξόδου JavaScript. Η γενική σύνταξη για την εκτέλεση του μεταγλωττιστή ως εξής είναι:
tsc --outFile
Αντικαθιστώ με το όνομα του αρχείου JavaScript-στόχου σας. Αντικαθιστώ με το όνομα του αρχείου TypeScript που περιέχει την οδηγία τριπλής κάθετο.
Για παράδειγμα:
tsc --outFile index.js main.ts
Αυτή η εντολή θα μεταγλωττίσει τα περιεχόμενα του κύρια.τς αρχείο, μαζί με όλα τα αρχεία που αναφέρονται από την οδηγία για την τριπλή κάθετο, στο index.js αρχείο.
Εναλλακτικά, μπορείτε να καθορίσετε κάθε αρχείο ξεχωριστά:
tsc --outFile
Είναι σημαντικό να σημειωθεί ότι η οδηγία για την τριπλή κάθετο ισχύει μόνο όταν δηλώνεται στην κορυφή ενός αρχείου. Εάν προσπαθήσετε να το χρησιμοποιήσετε οπουδήποτε αλλού, το TypeScript θα το αντιμετωπίσει ως ένα κανονικό σχόλιο μιας γραμμής χωρίς ιδιαίτερο νόημα.
Πρέπει να χρησιμοποιείτε χώρους ονομάτων ή ενότητες;
Αν και οι χώροι ονομάτων δεν έχουν καταργηθεί, συνιστάται συχνά η οργάνωση και η διαχείριση του κωδικού σας χρησιμοποιώντας μονάδες ES6. Οι μονάδες είναι πιο εύκολο να διατηρηθούν και να διαχειριστούν και μπορείτε να τις καλύψετε σε πολλά αρχεία.
Επιπλέον, μπορείτε να καθορίσετε τις σχέσεις μεταξύ των λειτουργικών μονάδων όσον αφορά τις εισαγωγές και τις εξαγωγές σε επίπεδο αρχείου. Οι χώροι ονομάτων δεν μπορούν να καθορίσουν τις εξαρτήσεις τους.
Τελικά, η επιλογή μεταξύ χώρων ονομάτων και λειτουργικών μονάδων θα εξαρτηθεί από τις συγκεκριμένες ανάγκες και απαιτήσεις του έργου σας, καθώς και οι δύο προσφέρουν έναν πολύτιμο τρόπο οργάνωσης και διαχείρισης κώδικα στο TypeScript.