- Το TypeScript 6.0 RC είναι η τελευταία έκδοση μεταγλωττιστή που βασίζεται σε JS και ευθυγραμμίζει τη συμπεριφορά, τις προεπιλογές και την ταξινόμηση με την επερχόμενη έκδοση TypeScript 7.0 που βασίζεται σε Go.
- Η έκδοση αυστηροποιεί τις σύγχρονες προεπιλογές (strict, ενότητες ESNext, ES2025), εισάγει τα Temporal, ES2025 API και νέες τυπογραφικές παραμέτρους Map upsert και RegExp.escape.
- Οι βασικές αλλαγές διαμόρφωσης περιλαμβάνουν έναν κενό πίνακα προεπιλεγμένων τύπων, την προεπιλεγμένη ρύθμιση του rootDir στον κατάλογο διαμόρφωσης και την κατάργηση του ES5, των παλιών συστημάτων μονάδων, του baseUrl και των παλαιών λειτουργιών επίλυσης.
- Οι ομάδες ενθαρρύνονται να αναβαθμίσουν στην έκδοση 6.0, να διορθώσουν τυχόν παρωχημένες εφαρμογές και προαιρετικά να χρησιμοποιήσουν την εντολή --stableTypeOrdering για να διασφαλίσουν μια ομαλότερη διαδρομή μετεγκατάστασης στην έκδοση TypeScript 7.0.
Το TypeScript 6.0 έφτασε και επίσημα στο ορόσημο του Release Candidate (RC)και δεν είναι απλώς μια ακόμη σταδιακή ενημέρωση. Αυτή είναι η τελευταία σημαντική έκδοση που εκτελείται στην μακροχρόνια υλοποίηση JavaScript του μεταγλωττιστή και της υπηρεσίας γλώσσας, ακριβώς πριν το έργο μεταβεί σε μια ολοκαίνουργια μηχανή TypeScript 7.0 που βασίζεται σε Go. Αυτό και μόνο καθιστά την έκδοση 6.0 μια καθοριστική έκδοση: είναι η γέφυρα που πρέπει να διασχίσετε πριν αλλάξουν όλα τα στοιχεία.
Μπορείτε να ξεκινήσετε να δοκιμάζετε το RC σήμερα εγκαθιστώντας το από το npm με:
npm install -D typescript@rc
Η βασική ιδέα πίσω από το TypeScript 6.0 είναι η προετοιμασία και η ευθυγράμμισηΑυτή η έκδοση εξομαλύνει τη διαδρομή από την έκδοση 5.9 στην έκδοση 7.0, αυστηροποιώντας τις προεπιλογές, καταργώντας το ιστορικό φορτίο και προσθέτοντας μερικές στοχευμένες λειτουργίες που είτε αντικατοπτρίζουν τη μελλοντική συμπεριφορά είτε εκθέτουν τις επερχόμενες δυνατότητες JavaScript, όπως τα Temporal, τα API ES2025 και τις μεθόδους "ανατροπής" του Map. Στην πορεία, υπάρχουν ορισμένες ανεπαίσθητες τροποποιήσεις στο σύστημα τύπων, νέες σημαίες μεταγλωττιστή και προεπιλογές διαμόρφωσης που θα επηρεάσουν σίγουρα τα πραγματικά έργα - ειδικά γύρω από... types, rootDir, και αυστηρότητα.
TypeScript 6.0 ως γέφυρα προς το 7.0 που βασίζεται στο Go
Το TypeScript 6.0 έχει σχεδιαστεί ρητά ως η τελευταία σημαντική έκδοση στην υπάρχουσα βάση κώδικα JavaScript.Η ομάδα TypeScript έχει ξαναγράψει τον μεταγλωττιστή και την υπηρεσία γλώσσας σε ένα nativo κινητήρα σε λειτουργία, αξιοποιώντας την εγγενή απόδοση και τον παραλληλισμό της κοινόχρηστης μνήμης. Αυτή η νέα μηχανή θα κυκλοφορήσει ως TypeScript 7.0 και νεότερες εκδόσεις, και η 6.0 βρίσκεται ακριβώς μπροστά της ως μεταβατικό στάδιο.
Οι περισσότερες από τις αλλαγές και τις καταργήσεις που παρουσιάζονται στην έκδοση 6.0 υπάρχουν για να κάνουν την μελλοντική σας αναβάθμιση στην έκδοση 7.0 βιώσιμη.Οι επιλογές που δεν μπορούν να υποστηριχθούν αποτελεσματικά στην εγγενή αρχιτεκτονική, τα παλιά συστήματα μονάδων και οι μακροχρόνιες ιδιορρυθμίες είτε καταργούνται είτε επισημαίνονται σαφώς ως παρωχημένες με μια καταπακτή διαφυγής: μπορείτε να ορίσετε "ignoreDeprecations": "6.0" σε σας tsconfig.json για την καταστολή των διαγνωστικών απαξίωσης στην έκδοση 6.0. Αλλά αυτή η σημαία δεν θα σας βοηθήσει στην έκδοση 7.0—αυτές οι επιλογές έχουν σχεδιαστεί να εξαφανιστούν εντελώς.
Αν μπείτε στον πειρασμό να «περιμένετε την έκδοση 7.0» πριν κάνετε οποιαδήποτε εκκαθάριση ρυθμίσεων, αυτή είναι παγίδα.Το 6.0 RC είναι η έκδοση όπου υποτίθεται ότι πρέπει να επισκευάσετε το tsconfig, ομαλοποίηση τύπων και αντιμετώπιση παρωχημένων σημαιών. Η πραγματοποίηση δύο γιγάντιων μεταπηδήσεων (5.x → 7.0) θα είναι πάντα πιο επίπονη από την επιλογή 5.x → 6.0 → 7.0 με μικρότερες, ελεγχόμενες αλλαγές.
Τι άλλαξε από την έκδοση beta 6.0
Μεταξύ της beta και της RC, η ομάδα TypeScript επικεντρώθηκε κυρίως στην ευθυγράμμιση της συμπεριφοράς με τη μελλοντική μηχανή 7.0., καθώς και μερικές στοχευμένες τροποποιήσεις στον έλεγχο τύπων και στις τυπογραφήσεις DOM.
Μία σημαντική αλλαγή επηρεάζει τον έλεγχο τύπου των εκφράσεων συνάρτησης που διαβιβάζονται σε γενικές κλήσεις, ειδικά σε περιβάλλοντα JSX. Όταν καλούνται γενικές συναρτήσεις με επανακλήσεις (για παράδειγμα στο React ή σε άλλα στοιχεία JSX), το RC αυστηροποιεί την εξαγωγή συμπερασμάτων, ώστε να αντικατοπτρίζει με μεγαλύτερη ακρίβεια τι θα κάνει η έκδοση 7.0. Στην πράξη, μπορεί να παρατηρήσετε ότι ορισμένες κλήσεις που βασίζονταν σε έμμεση εξαγωγή συμπερασμάτων απαιτούν πλέον ένα ρητό όρισμα τύπου για να διατηρείται ο έλεγχος τύπου ικανοποιητικός, αλλά θα εντοπίσετε επίσης περισσότερα γνήσια σφάλματα στον υπάρχοντα κώδικα.
Η κατάργηση της σύνταξης διεκδίκησης εισαγωγής έχει επίσης επεκταθείΤο TypeScript ήδη προειδοποιούσε για το παλιό import ... assert {...} σύνταξη σε στατικές εισαγωγές λόγω της μετατόπισης της πρότασης ECMAScript σε χαρακτηριστικά εισαγωγής με with. Τώρα, αυτή η κατάργηση ισχύει και για δυναμικές εισαγωγές που χρησιμοποιούν import() με αντικείμενα ισχυρισμού όπως import(..., { assert: {...}})Η κατεύθυνση είναι σαφής: προχωρήστε στην εισαγωγή χαρακτηριστικών παντού.
Οι τύποι βιβλιοθηκών DOM έχουν ανανεωθεί ώστε να ταιριάζουν με τα τρέχοντα πρότυπα πλατφορμών ιστού, συμπεριλαμβανομένων ενημερώσεων στα API που σχετίζονται με το Temporal σε περιβάλλοντα ιστού. Εάν δημιουργείτε εφαρμογές προγράμματος περιήγησης, επωφελείστε από πιο ακριβείς πληκτρολογήσεις και καλύτερα εργαλεία επεξεργασίας γύρω από αυτά τα νεότερα API.
Λιγότερη ευαισθησία περιβάλλοντος για συναρτήσεις που δεν χρησιμοποιούνται ποτέ this
Το TypeScript 6.0 εισάγει μια ανεπαίσθητη αλλά πολύ πρακτική αλλαγή στον τρόπο με τον οποίο αντιμετωπίζει τις συναρτήσεις χωρίς σαφή this χρήση κατά την εξαγωγή συμπερασμάτων τύπουΙστορικά, οι συναρτήσεις με παραμέτρους που δεν έχουν σαφείς τύπους θα μπορούσαν να θεωρηθούν «ευαίσθητες στα συμφραζόμενα», που σημαίνει ότι η παράμετρος και η this Οι τύποι εξαρτιόνταν από το πού χρησιμοποιούνταν. Αυτό επηρεάζει τη γενική συμπερασματολογία και μπορεί να οδηγήσει σε περίεργη συμπεριφορά ανάλογα με τη σύνταξη της συνάρτησης.
Σκεφτείτε έναν γενικό βοηθό που χρησιμοποιεί ένα ζεύγος παραγωγού και καταναλωτή:
declare function callIt<T>(obj: {
produce: (x: number) => T,
consume: (y: T) => void,
}): void;
// Arrow functions: everything infers fine
callIt({
produce: (x: number) => x * 2,
consume: y => y.toFixed(),
});
// Flipped property order still fine with arrows
callIt({
consume: y => y.toFixed(),
produce: (x: number) => x * 2,
});
Αλλά με τη σύνταξη μεθόδου, η προηγούμενη συμπεριφορά θα μπορούσε να είναι εκπληκτικήΗ ίδια λογική, γραμμένη ως μέθοδος, ενδέχεται να αποτύχει όταν οι ιδιότητες αναδιατάσσονται, επειδή το TypeScript παρέλειψε τις "ευαίσθητες στα συμφραζόμενα" συναρτήσεις κατά την εξαγωγή γενικών ορισμάτων. Οι μέθοδοι έχουν έμμεσα ένα this παράμετρος, η οποία τους κατέτασσε σε αυτήν την ευαίσθητη κατηγορία ακόμα κι αν this δεν αναφέρθηκε ποτέ στην πραγματικότητα.
Στην έκδοση 6.0, συναρτήσεις που δεν διαβάζουν ποτέ this αντιμετωπίζονται πλέον ως λιγότερο ευαίσθητα στα συμφραζόμεναΜε άλλα λόγια, αν ο μεταγλωττιστής δει ότι this δεν χρησιμοποιείται καθόλου μέσα σε μια συνάρτηση, δεν θα τιμωρήσει αυτήν τη συνάρτηση κατά τη συμπερασματική διαδικασία. Αυτό σημαίνει ότι η σύνταξη μεθόδου και η σύνταξη βέλους είναι πλέον πολύ πιο συνεπείς σε γενικά σενάρια συμπερασματικής διαδικασίας και η περίεργη συμπεριφορά "λειτουργεί με μία σειρά ιδιοτήτων, αποτυγχάνει με άλλη" εξαφανίζεται σε αυτές τις περιπτώσεις.
Αυτή η αλλαγή βελτιώνει την ιεράρχηση των υποψηφίων για την εξαγωγή συμπερασμάτων τύπου: λειτουργίες χωρίς χρήση this γίνονται πηγές πληροφοριών υψηλότερης προτεραιότητας κατά την εξαγωγή συμπερασμάτων για ορίσματα τύπου όπως TΤο αποτέλεσμα είναι λιγότερο μυστηριώδες unknown τύποι και πιο σταθερή συμπερασματολογία μεταξύ αναδιαμορφωτών. Αυτή η εργασία συνεισέφερε ο Mateusz Burzyński.
Υποστήριξη για Node #/ εισαγωγές υποδιαδρομών
Η λειτουργία «εισαγωγές υποδιαδρομών» του Node επιτρέπει στα πακέτα να ορίζουν εσωτερικά ψευδώνυμα εισαγωγής μέσω του imports πεδίο σε package.jsonΑυτά τα ψευδώνυμα απλοποιούν τις εισαγωγές αποφεύγοντας τις βαθιές σχετικές διαδρομές. Προηγουμένως, κάθε κλειδί υποδιαδρομής έπρεπε να έχει τουλάχιστον ένα τμήμα μετά το αρχικό #, κάτι που ήταν ένας μικρός αλλά ενοχλητικός περιορισμός για άτομα που είχαν συνηθίσει να συνδυάζουν συμβάσεις όπως @/....
Το TypeScript 6.0 υποστηρίζει πλέον εισαγωγές υποδιαδρομών που ξεκινούν με #/, ευθυγραμμιζόμενο με τη νεότερη συμπεριφορά του Node 20. Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε μια διαμόρφωση όπως:
{
"name": "my-package",
"type": "module",
"imports": {
"#": "./dist/index.js",
"#/*": "./dist/*"
}
}
Με αυτήν τη ρύθμιση, οι ενότητες εντός του πακέτου—ακόμη και οι καταναλωτές—μπορούν να εισάγουν μέσω ενός συνοπτικού #/... πρόθεμα αντί για μεγάλες σχετικές διαδρομές όπως ../../utils.jsΤο TypeScript κατανοεί αυτό το μοτίβο όταν --moduleResolution έχει οριστεί σε node20, nodenextΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. bundler, αντικατοπτρίζοντας τη σημασιολογία του σύγχρονου Node. Αυτή η βελτίωση υλοποιήθηκε από τον συνεργάτη magic-akari.
Χρησιμοποιώντας --moduleResolution bundler μαζί σου, --module commonjs
Προηγουμένως, --moduleResolution bundler μπορούσε να χρησιμοποιηθεί μόνο με --module esnext or preserveΜε την υποτίμηση των παλαιότερων node/node10 Στη λειτουργία ανάλυσης λειτουργικής μονάδας, πολλά έργα χρειάζονταν μια διαδρομή μετεγκατάστασης που να ταιριάζει στην τρέχουσα έξοδο CommonJS τους.
Το TypeScript 6.0 επιτρέπει πλέον τον συνδυασμό --moduleResolution bundler μαζί σου, --module commonjsΑυτός ο συνδυασμός αποτελεί συχνά ένα πρακτικό εφαλτήριο για βάσεις κώδικα που εξακολουθούν να εκπέμπουν CommonJS, αλλά κινούνται προς ροές εργασίας που βασίζονται σε πακέτα ή σε νεότερη λογική επίλυσης. Από εκεί και πέρα, τα έργα μπορούν να σχεδιάσουν μια μακροπρόθεσμη μετεγκατάσταση σε:
module: "preserve"μαζί σου,moduleResolution: "bundler"για συνδυασμένες εφαρμογές ιστού και παρόμοιες ρυθμίσεις ήmodule: "nodenext"για περιβάλλοντα που στοχεύουν άμεσα στο σύγχρονο Node.js.
Αυτή η αλλαγή είναι ιδιαίτερα σημαντική για ομάδες που αποχωρούν moduleResolution: node πίσω αλλά δεν είναι ακόμη έτοιμο να υιοθετήσει πλήρως την έξοδο του ESM. Σας δίνει μια σταδιακή διαδρομή αντί για γκρεμό.
The --stableTypeOrdering σημαία για μίμηση παραγγελίας 7.0
Μία από τις σημαντικότερες αρχιτεκτονικές αναβαθμίσεις που έρχονται στο TypeScript 7.0 είναι ο παράλληλος έλεγχος τύπων.Η παράλληλη εκτέλεση πολλαπλών ελεγκτών σημαίνει ότι διαφορετικά μέρη του προγράμματος μπορούν να επισκεφθούν με διαφορετική σειρά. Εάν τα αναγνωριστικά τύπων και η σειρά των συμβόλων εξαρτώνται από τη σειρά των επισκέψεων, μπορεί να καταλήξετε με μη ντετερμινιστική σειρά ενώσεων, σειρά ιδιοτήτων, ακόμη και σπάνιες διαφορές στα διαγνωστικά.
Οι παλαιότερες εκδόσεις TypeScript αντιστοιχίζουν εσωτερικά αναγνωριστικά τύπου με βάση τη σειρά συναντήσεωνΑυτά τα αναγνωριστικά χρησιμοποιούνται στη συνέχεια για την ταξινόμηση πραγμάτων όπως τύποι συνένωσης και ιδιότητες. Γι' αυτό και οι φαινομενικά ακίνδυνες επεξεργασίες - όπως η εισαγωγή ενός νέου const πριν από μια υπάρχουσα συνάρτηση—μπορεί να αλλάξει τη σειρά των κυριολεκτικών ενώσεων σε εκπεμπόμενα .d.ts αρχεία ή αλλάξτε τον τρόπο εκτύπωσης ορισμένων τύπων στον επεξεργαστή σας.
Το TypeScript 7.0 μεταβαίνει σε μια ντετερμινιστική, βασισμένη στο περιεχόμενο σειρά για εσωτερικά αντικείμεναΚάθε τύπος ή σύμβολο ταξινομείται σύμφωνα με τη δομή του και όχι με την τυχαία σειρά επίσκεψης, επομένως το ίδιο πρόγραμμα θα παράγει με συνέπεια την ίδια σειρά ανεξάρτητα από τον παραλληλισμό ή τη σειρά μεταγλώττισης. Αυτό εξαλείφει το μυστήριο του «γιατί ξαφνικά ανατράπηκε η ένωσή μου;».
Για να σας βοηθήσει να συγκρίνετε τη συμπεριφορά μεταξύ 6.0 και 7.0, το RC παρουσιάζει --stableTypeOrderingΌταν αυτή η σημαία είναι ενεργοποιημένη, το TypeScript 6.0 υιοθετεί τον ίδιο ντετερμινιστικό αλγόριθμο ταξινόμησης τύπων που χρησιμοποιεί το 7.0. Το αποτέλεσμα είναι πολύ λιγότερες διαφορές στα αρχεία δηλώσεων που εκπέμπονται και πιο προβλέψιμες συγκρίσεις μεταξύ των εξόδων 6.x και 7.x.
Ωστόσο, ο ντετερμινισμός δεν είναι ελεύθερος. Ενεργοποίηση --stableTypeOrdering μπορεί να επιβραδύνει τον έλεγχο τύπων έως και περίπου 25%, ανάλογα με τον κώδικά σας. Σχεδιάζεται ως βοήθημα διάγνωσης και μετεγκατάστασης, όχι ως μια ρύθμιση απόδοσης που δεν αλλάζει ποτέ.
Εάν βλέπετε σφάλματα τύπου μόνο όταν --stableTypeOrdering είναι ενεργοποιημένο, συνήθως σημαίνει ότι ο προηγούμενος κώδικά σας βασιζόταν στην παλιά σχεδόν τυχαία σειρά τύπων για να «λειτουργήσει απλώς η συμπερασματική διαδικασία». Οι διορθώσεις συνήθως περιλαμβάνουν τη σαφήνεια των τύπων—προσθήκη ενός ορίσματος τύπου σε μια προβληματική γενική κλήση ή σχολιασμό μιας μεταβλητής με μια συγκεκριμένη διεπαφή αντί να βασίζεται αποκλειστικά στη συμπερασματική διαδικασία για ένα σύνθετο αντικείμενο.
Νέα es2025 επιλογές στόχου και βιβλιοθήκης
Το TypeScript 6.0 προσθέτει ένα es2025 επιλογή και για τα δύο target libΕνώ το ES2025 δεν εισάγει νέα βασική σύνταξη σε σύγκριση με τα προηγούμενα χρόνια, ενσωματώνει αρκετά τυποποιημένα API που προηγουμένως ήταν αποκλεισμένα. esnext.
Με στόχευση ή συμπερίληψη es2025, αποκτάτε ενημερωμένες πληκτρολογήσεις για νέες ενσωματωμένες λειτουργίες όπως το λευκό και το γκρι είναι μια ασφαλής επιλογή. Ταιριάζουν σχεδόν με οποιοδήποτε χρώμα ξύλου και δημιουργούν μια ισορροπημένη εμφάνιση. Για μια μοντέρνα αίσθηση, ίσως προτιμήσετε RegExp.escapeκαι ορισμένα API μετακινούνται από esnext σε es2025Αυτό περιλαμβάνει πράγματα όπως Promise.try, βοηθοί επαναληπτών και επιπλέον Set μέθοδοι που έχουν φτάσει σε πλήρη ωριμότητα. Αυτή η εργασία συνεισέφερε ο Kenta Moriuchi.
Η ευρύτερη ιστορία είναι ότι η προεπιλογή target στην έκδοση 6.0 παρακολουθεί πλέον το τρέχον έτος ECMAScript, το οποίο προς το παρόν ουσιαστικά σας οδηγεί στο ES2025 όταν δεν καθορίζετε έναν στόχο. Αυτό ταιριάζει καλύτερα με την πραγματικότητα των αειθαλών χρόνων εκτέλεσης και των σύγχρονων εργαλείων.
Ενσωματωμένοι τύποι για το Temporal API
Η πολυαναμενόμενη πρόταση για την Προσωρινή Πρόταση έχει φτάσει στο στάδιο 3 και αναμένεται να αντικαταστήσει την διαβόητη Date API για σοβαρή εργασία ημερομηνίας/ώραςΤο TypeScript 6.0 προσφέρει πλέον πληκτρολόγηση πρώτης κατηγορίας για Temporal, ώστε να μπορείτε να ξεκινήσετε να γράφετε κώδικα που βασίζεται σε Temporal με πλήρη ασφάλεια τύπων και υποστήριξη προγράμματος επεξεργασίας.
Για να ενεργοποιήσετε τους χρονικούς τύπους, μπορείτε να χρησιμοποιήσετε --target esnext ή ρυθμίστε ρητά τις βιβλιοθήκες σας μέσω κάτι σαν:
{
"compilerOptions": {
"lib":
}
}
Ή μπορείτε να επιλέξετε μόνο το χρονικό υποσύνολο με "esnext.temporal" αν θέλετε μια πιο λεπτομερή διαμόρφωση. Μόλις ενεργοποιηθεί, μπορείτε να γράψετε κώδικα σύμφωνα με τα εξής:
let yesterday = Temporal.Now.instant().subtract({
hours: 24,
});
let tomorrow = Temporal.Now.instant().add({
hours: 24,
});
console.log(`Yesterday: ${yesterday}`);
console.log(`Tomorrow: ${tomorrow}`);
Το Temporal υποστηρίζεται ήδη σε ορισμένα runtimes και μπορεί να γίνει polyfill σε άλλα., επομένως αυτοί οι τύποι είναι πραγματικά χρησιμοποιήσιμοι σήμερα. Η τεκμηρίωση αναδύεται στο MDN (με ορισμένα κενά που εξακολουθούν να καλύπτονται). Οι τυπογραφικές συνεισφορές έγιναν από τον χρήστη Renegade334 του GitHub.
Υποστήριξη ανύψωσης: Map.getOrInsert getOrInsertComputed
Οι προγραμματιστές JavaScript έχουν γράψει χειροκίνητα μοτίβα "έλεγχος-μετά-ορισμός-μετά-λήψη" σε Map για χρόνιαΈνα τυπικό μοτίβο ελέγχει εάν υπάρχει κάποιο κλειδί, ορίζει μια προεπιλογή εάν δεν υπάρχει και τέλος επιστρέφει μια τιμή—τυπική που είναι εύκολο να γίνει λάθος ή να επαναληφθεί παντού.
Η πρόταση «ανατροπής» ECMAScript (τώρα στάδιο 4) εισάγει getOrInsert getOrInsertComputed on Map WeakMapΤο TypeScript 6.0 προσθέτει υποστήριξη τύπων για αυτές τις μεθόδους στο esnext lib, ώστε να μπορείτε να αρχίσετε να γράφετε περισσότερες δηλωτικές ανατροπές αμέσως.
Με getOrInsert, ένα λεπτομερές μοτίβο όπως αυτό:
function processOptions(compilerOptions: Map<string, unknown>) {
let strictValue: unknown;
if (compilerOptions.has("strict")) {
strictValue = compilerOptions.get("strict");
} else {
strictValue = true;
compilerOptions.set("strict", strictValue);
}
// ...
}
Μπορεί να συμπτυχθεί σε μία μόνο γραμμή:
function processOptions(compilerOptions: Map<string, unknown>) {
let strictValue = compilerOptions.getOrInsert("strict", true);
// ...
}
Ο σύντροφος getOrInsertComputed είναι ιδανικό για ακριβές προεπιλογές—χρειάζεται μια επανάκληση που καλείται μόνο εάν λείπει το κλειδί. Αυτή η επανάκληση μπορεί ακόμη και να λάβει το κλειδί ως παράμετρο, επιτρέποντάς σας να εξαγάγετε την προεπιλογή από το ίδιο το κλειδί. Οι τυπογραφικές μέθοδοι του TypeScript καταγράφουν αυτές τις συμπεριφορές με ακρίβεια, χάρη και πάλι στις συνεισφορές του Renegade334.
RegExp.escape και ασφαλέστερη δημιουργία regex
Αν έχετε ποτέ συνενώσει συμβολοσειρές που παρέχονται από τον χρήστη σε μια κανονική έκφραση, γνωρίζετε ότι πρέπει πρώτα να διαφύγετε από τους ειδικούς χαρακτήρες.—αλλά οι περισσότερες βάσεις κώδικα είτε εφαρμόζουν ξανά την εντολή escape σε έναν βοηθό είτε την ξεχνούν εντελώς. Η πρόταση RegExp Escaping (τώρα στάδιο 4) τυποποιεί αυτό με RegExp.escape.
Το TypeScript 6.0 εκθέτει τύπους για RegExp.escape σύμφωνα με το es2025 libΑυτό σημαίνει ότι όταν στοχεύετε ή συμπεριλαμβάνετε το ES2025, μπορείτε να γράψετε με ασφάλεια βοηθητικά αρχεία όπως:
function matchWholeWord(word: string, text: string) {
const escapedWord = RegExp.escape(word);
const regex = new RegExp(`\\b${escapedWord}\\b`, "g");
return text.match(regex);
}
Δεν χρειάζεται πλέον λειτουργία διαφυγής με χειροκίνητη κυλινδρική λειτουργίακαι το TypeScript θα κατανοήσει πλήρως και θα κάνει έλεγχο τύπων στο API. Αυτή η προσθήκη, όπως και η εργασία-στόχος ES2025, προέρχεται από τον Kenta Moriuchi.
dom Η lib περιλαμβάνει πλέον API επανάληψης και ασύγχρονης επανάληψης
Ιστορικά, η TypeScript χώριζε την υποστήριξη του επαναλήπτη DOM σε dom, dom.iterableκαι dom.asynciterableΑν θέλατε να επαναλάβετε NodeList or HTMLCollection μαζί σου, for...of, έπρεπε να θυμηθείς να προσθέσεις dom.iterable σε σας "lib" διαμόρφωση παράλληλα domΑυτή ήταν μια συνηθισμένη πηγή σύγχυσης, ειδικά επειδή όλα τα σύγχρονα προγράμματα περιήγησης υποστηρίζουν επαναλήψιμες και ασύγχρονες επαναλήψιμες σε συλλογές DOM.
Στο TypeScript 6.0, lib.dom.iterable.d.ts lib.dom.asynciterable.d.ts ουσιαστικά συγχωνεύονται σε lib.dom.d.tsΑυτό σημαίνει χρήση "dom" μόνο του τώρα σας δίνει επαναλήψιμη και ασύγχρονη επαναλήψιμη συμπεριφορά από προεπιλογή.
Μπορείτε ακόμα να αναφέρετε dom.iterable dom.asynciterable σε σας tsconfig, αλλά αυτά τα αρχεία είναι πλέον κενά κελύφη. Αν η προηγούμενη διαμόρφωσή σας έμοιαζε με αυτό:
{
"compilerOptions": {
"lib":
}
}
Μπορείτε να το απλοποιήσετε με ασφάλεια σε "dom"και επανάληψη σε συλλογές DOM όπως document.querySelectorAll("div") θα εξακολουθεί να ελέγχει τον τύπο:
for (const element of document.querySelectorAll("div")) {
console.log(element.textContent);
}
Αυτός είναι ένας μικρός αλλά ευπρόσδεκτος καθαρισμός που ευθυγραμμίζει την προεπιλεγμένη βιβλιοθήκη DOM με την πραγματικότητα των τρεχόντων προγραμμάτων περιήγησης και αφαιρεί ένα ακόμη πρόβλημα από τη ρύθμιση του έργου.
Προεπιλογές, αποσύρσεις και αλλαγές που δεν λειτουργούν στο TypeScript 6.0
Πέρα από τα λαμπερά API, η έκδοση 6.0 κάνει μερικές από τις πιο αμφισβητούμενες αλλαγές στις προεπιλογές του TypeScript από την έκδοση 1.0.Αυτές οι αλλαγές αντικατοπτρίζουν το τρέχον οικοσύστημα JavaScript: αειθαλείς χρόνους εκτέλεσης, ESM ως βασική γραμμή, ευρεία χρήση προγραμμάτων ομαδοποίησης και έντονη επιθυμία για αυστηρή πληκτρολόγηση και απόδοση.
Η ομάδα επισημαίνει μερικές γενικές τάσεις που διέπουν αυτές τις αποφάσειςΤα ES5 και τα πραγματικά παλαιότερα προγράμματα περιήγησης έχουν σχεδόν εξαφανιστεί. Τα συστήματα μονάδων AMD/UMD είναι πλέον εξειδικευμένα. Σχεδόν όλα διατίθενται πλέον ως μονάδες. Η αυστηρή πληκτρολόγηση είναι ο κανόνας και η απόδοση πρέπει να παραμείνει στο επίκεντρο, ειδικά καθώς η έκδοση 7.0 φέρνει παράλληλο έλεγχο.
Ως αποτέλεσμα, οι εκδόσεις TypeScript 6.0 και 7.0 διαμορφώνονται με σύγχρονες προεπιλογές και λιγότερες «παλαιές βαλβίδες διαφυγής».Για την έκδοση 6.0 RC, μπορείτε να απενεργοποιήσετε προσωρινά τις αποσύρσεις ορίζοντας "ignoreDeprecations": "6.0" σε σας tsconfig, αλλά αυτές οι επιλογές δεν θα υπάρχουν στην έκδοση 7.0. Ορισμένες προσαρμογές μπορούν να αυτοματοποιηθούν με εργαλεία όπως το πειραματικό ts5to6 codemod, το οποίο μπορεί να βοηθήσει στην επανεγγραφή πραγμάτων όπως baseUrl rootDir διαμορφώσεις σε ένα έργο.
Δύο προσαρμογές που πολλά έργα θα χρειαστούν άμεσα
Ενώ υπάρχει μια μακρά λίστα αποδοκιμασιών, δύο αλλαγές διαμόρφωσης είναι πιθανό να επηρεάσουν τον μεγαλύτερο αριθμό βάσεων κώδικα:
- Ορίστε ρητά το
typesπαράταξη (πολύ συχνάσυν το πλαίσιο δοκιμών σας). Χωρίς αυτό, θα χάσετε τους αυτόματα συμπεριλαμβανόμενους τύπους περιβάλλοντος από@types/*. - Ρητά ορισμένο
rootDir(συνήθως"./src") αν βασιζόσασταν στην παλιά «συμπερασματική αρχή της κοινής ρίζας». Διαφορετικά, η δομή του αρχείου που εκπέμπεται ενδέχεται να αλλάξει με ανεπαίσθητους τρόπους.
Συμπτώματα έλλειψης types περιλαμβάνουν μια πλημμύρα σφαλμάτων σχετικά με καθολικές μεταβλητές όπως process, fs, pathΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. describe όντας απροσδιόριστοςΣυμπτώματα μιας αλλαγής rootDir αφορούν περισσότερο τις διαδρομές εξόδου που κερδίζουν απροσδόκητα ένα επιπλέον src τμήμα (για παράδειγμα dist/src/index.js αντί του dist/index.js).
Ενημερωμένες προεπιλογές για σύγχρονα έργα
Αρκετές επιλογές μεταγλωττιστή έχουν πλέον νέες προεπιλεγμένες τιμές που ταιριάζουν με τον τρόπο με τον οποίο κατασκευάζονται στην πραγματικότητα οι περισσότερες νέες εφαρμογές.:
strictτώρα έχει προεπιλεγείtrueΗ αυστηρή λειτουργία δεν είναι πλέον πολυτέλεια με δυνατότητα επιλογής. Είναι η βασική γραμμή. Εάν προηγουμένως βασιζόσασταν σε μη αυστηρή συμπεριφορά, θα πρέπει να ορίσετε ρητά"strict": false(αν και θα χάσετε μια μεγάλη κατηγορία ελέγχων ασφαλείας).moduleτώρα έχει προεπιλεγείesnext, αντανακλώντας ότι το ESM είναι η κυρίαρχη μορφή ενότητας και λειτουργεί καλύτερα με τα bundlers και το σύγχρονο Node.targetαπό προεπιλογή στο τρέχον έτος ECMAScript (ουσιαστικά ES2025 αυτή τη στιγμή), αναγνωρίζοντας ότι οι περισσότερες αναπτύξεις στοχεύουν σε αειθαλή περιβάλλοντα ή περνούν μέσω ενός bundler που μπορεί να υποβαθμίσει περαιτέρω όταν είναι πραγματικά απαραίτητο.noUncheckedSideEffectImportsείναι τώραtrueαπό προεπιλογή, βοηθώντας σας να εντοπίσετε τυπογραφικά λάθη ή λανθασμένες διαδρομές σε εισαγωγές που περιλαμβάνονται μόνο για παρενέργειες.libReplacementπροεπιλογές σεfalse, αποφεύγοντας μια σειρά από επιπλέον αποτυχημένες αναλύσεις μονάδων και επιβάρυνση παρακολούθησης μέχρι ένα έργο να επιλέξει ρητά να συμπεριλάβει εξειδικευμένες συμπεριφορές βιβλιοθήκης.
Εάν κάποια από αυτές τις νέες προεπιλογές προκαλέσει σφάλμα στην κατασκευή σας, όλες μπορούν να παρακαμφθούν ρητά στο tsconfig.jsonΑλλά η πρόθεση είναι τα νέα έργα να «κάνουν απλώς το σωστό» χωρίς επιπλέον ρυθμίσεις.
rootDir τώρα έχει προεπιλεγμένη τιμή τον κατάλογο ρυθμίσεων
Προηγουμένως, αν δεν είχατε διευκρινίσει rootDir, Το TypeScript προσπάθησε να συμπεράνει μια κοινή ρίζα πηγής με βάση όλα τα αρχεία που δεν αποτελούν δηλώσεις στο πρόγραμμα. Αυτό δυσκόλευε την συλλογιστική σχετικά με τα όρια του έργου και απαιτούσε τη σάρωση πολλών διαδρομών αρχείων μόνο και μόνο για να αποφασιστεί πού θα έπρεπε να γίνει root η emit.
Στο TypeScript 6.0, η προεπιλεγμένη rootDir είναι απλώς ο κατάλογος που περιέχει tsconfig.jsonΗ παλιά συμπεριφορά συμπερασμού ισχύει μόνο όταν εκτελείτε tsc στη γραμμή εντολών χωρίς κανένα tsconfig καθόλου.
Αυτή η αλλαγή σημαίνει ότι τα έργα με αρχεία πηγαίου κώδικα που βρίσκονται βαθύτερα από τον κατάλογο ρυθμίσεων θα πρέπει να ορίζουν ρητά rootDirΜια συνηθισμένη ρύθμιση θα ήταν:
{
"compilerOptions": {
// ...
"rootDir": "./src"
},
"include":
}
Εάν η διαμόρφωσή σας αναφέρει αρχεία παραπάνω από το tsconfig τοποθεσία, θα χρειαστεί επίσης να επεκτείνετε rootDir αναλόγως, Για παράδειγμα "rootDir": "../src" για κοινόχρηστους καταλόγους πηγής.
types τώρα η προεπιλογή είναι ένας κενός πίνακας
Αυτή είναι αναμφισβήτητα η πιο σημαντική αλλαγή για έργα στον πραγματικό κόσμο.Ιστορικά, αν δεν διευκρινίσατε types in compilerOptions, το TypeScript θα συμπεριλάμβανε αυτόματα τα πάντα κάτω από node_modules/@typesΑυτό ήταν βολικό, αλλά και ακριβό και εύθραυστο: τα σύγχρονα αποθετήρια συχνά συγκεντρώνουν εκατοντάδες @types πακέτα μεταβατικά.
Στο TypeScript 6.0, types προεπιλογές σε [], που σημαίνει ότι δεν φορτώνονται αυτόματα πακέτα τύπου ambientΤώρα επιλέγετε ρητά τα παγκόσμια περιβάλλοντα που πραγματικά χρειάζεστε, για παράδειγμα:
{
"compilerOptions": {
"types":
}
}
Αυτό μπορεί να μειώσει τον χρόνο κατασκευής κατά 20-50% σε ορισμένα έργα., επειδή ο μεταγλωττιστής δεν χρειάζεται πλέον να ανιχνεύει κάθε αρχείο δήλωσης στο @typesΑν θέλετε πραγματικά την παλιά συμπεριφορά «φόρτωση όλων», μπορείτε να καθορίσετε:
{
"compilerOptions": {
"types":
}
}
Εάν δείτε ξαφνικά σφάλματα όπως "Δεν είναι δυνατή η εύρεση του ονόματος 'διαδικασία'" ή "Δεν είναι δυνατή η εύρεση της ενότητας 'fs'", αυτό είναι το σύνθημά σας για να προσθέσετε node (και οποιουσδήποτε άλλους τύπους δοκιμών/χρόνου εκτέλεσης στους οποίους βασίζεστε) στο δικό σας types πίνακας.
Καταργήθηκε: target: es5 --downlevelIteration
Η στόχευση ES5 έχει πλέον καταργηθείΜε κάθε σχετικό πρόγραμμα περιήγησης να κυκλοφορεί το ES2015+ εδώ και χρόνια και τον Internet Explorer να έχει αποσυρθεί, η έξοδος του ES5 δεν θεωρείται πλέον άξια της πολυπλοκότητας που υπάρχει στο εσωτερικό του ίδιου του TypeScript. Ο χαμηλότερος υποστηριζόμενος στόχος από εδώ και στο εξής είναι το ES2015. Εάν πρέπει πραγματικά να κυκλοφορήσετε το ES5, η σύσταση είναι να χρησιμοποιήσετε έναν εξωτερικό μεταφορέα (όπως το Babel ή έναν αγωγό bundler) είτε στον πηγαίο κώδικα του TS σας είτε στην έξοδο του TS.
The --downlevelIteration Η σημαία είναι επίσης απαρχαιωμένη, επειδή η μόνη ουσιαστική περίπτωση χρήσης του ήταν η προσαρμογή της συμπεριφοράς εκπομπής για τους στόχους ES5. Στο TypeScript 6.0, ο καθορισμός downlevelIteration θα δημιουργήσει ένα σφάλμα κατάργησης. Εάν βρίσκεστε σε ES2015 ή νεότερη έκδοση, η σημαία δεν είχε ποτέ καμία επίδραση ούτως ή άλλως.
Καταργήθηκε: --moduleResolution node και κληρονομιά classic
The node (γνωστός και ως node10) η λειτουργία ανάλυσης της μονάδας έχει καταργηθείΜοντελοποίησε τη συμπεριφορά του Node 10, αλλά δεν ταιριάζει με τη σύγχρονη σημασιολογία ESM και ανάλυσης του Node. Τα έργα θα πρέπει να μετεγκατασταθούν σε nodenext (για άμεσους στόχους κόμβου) ή bundler (για περιβάλλοντα που βασίζονται σε bundler όπως εφαρμογές ιστού ή Bun).
Το πρωτότυπο moduleResolution: classic Η στρατηγική έχει επίσης αφαιρεθείΑυτή ήταν η ιστορία της TypeScript πριν από την επίλυση του Node. Σήμερα, όλα τα πρακτικά σενάρια εξυπηρετούνται καλύτερα από nodenext or bundler, οπότε το κλασικό έχει εξαφανιστεί για να μειωθεί η πολυπλοκότητα και οι περιπτώσεις με περιορισμένες δυνατότητες.
Απαρχαιωμένα: AMD, UMD, SystemJS και module: none
Ο ακόλουθος module οι τιμές είναι πλέον παρωχημένες και ουσιαστικά δεν υποστηρίζονται:
amdumdsystemjsnone
Αυτές οι μορφές ήταν κρίσιμες στην εποχή πριν από τον ESM, όταν τα προγράμματα περιήγησης δεν είχαν εγγενή υποστήριξη μονάδων και οι προγραμματιστές βασίζονταν στην AMD, την UMD ή την SystemJS για να καλύψουν το κενό. Σήμερα, τα ESM plus bundlers ή οι χάρτες εισαγωγής χειρίζονται σχεδόν όλες τις πραγματικές περιπτώσεις χρήσης και η έννοια «καμία» δεν ήταν ποτέ ιδιαίτερα σαφώς καθορισμένη.
Εάν εξακολουθείτε να στοχεύετε σε αυτές τις παλαιότερες μορφές λειτουργικών μονάδων, η σύσταση είναι να μεταβείτε σε έναν στόχο που εκπέμπει ESM και να βασιστείτε σε έναν bundler ή έναν εναλλακτικό μεταγλωττιστή για την τελική συσκευασία—ή να παραμείνετε στο TypeScript 5.x μέχρι να τεθεί σε εφαρμογή ένα σχέδιο μετεγκατάστασης. Στο πλαίσιο αυτού του καθαρισμού, το παλιό amd-module Η οδηγία επίσης καταργείται.
Καταργήθηκε: baseUrl
The baseUrl η επιλογή αποτελεί εδώ και καιρό πηγή περίεργης, δύσκολης στον εντοπισμό σφαλμάτων συμπεριφοράς επίλυσης μονάδωνΠολλά έργα το χρησιμοποιούσαν αποκλειστικά ως πρόθεμα για paths καταχωρήσεις, αλλά η TypeScript την αντιμετώπισε επίσης ως γενική ρίζα αναζήτησης, προκαλώντας εισαγωγές όπως "someModule" να αποφασίσω να src/someModule.js απροσδόκητα, όταν το μόνο που ήθελε ο προγραμματιστής ήταν να υποστηρίξει προσαρμοσμένα ψευδώνυμα όπως @app/*.
Σε 6.0, baseUrl έχει καταργηθεί και δεν θα χρησιμοποιείται πλέον ως ρίζα αναζήτησηςΔεν απαιτείται χαρτογράφηση διαδρομής baseUrl για αρκετό καιρό, επομένως η συνιστώμενη μετεγκατάσταση είναι απλώς να διπλώσετε το πρόθεμα σε κάθε paths καταχώρηση. Για παράδειγμα:
// Before
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@app/*": ,
"@lib/*":
}
}
}
// After
{
"compilerOptions": {
"paths": {
"@app/*": ,
"@lib/*":
}
}
}
Μόνο σε σπάνιες περιπτώσεις όπου πραγματικά χρησιμοποιήσατε baseUrl ως γενική ρίζα αναζήτησης θα χρειαστεί να αναπαράγετε αυτήν τη συμπεριφορά με μια χαρτογράφηση διαδρομής που καλύπτει όλα τα δεδομένα, όπως:
"paths": {
"*": ,
"@app/*": ,
"@lib/*":
}
Για τις περισσότερες ομάδες, απλώς αφαιρώντας baseUrl και ενσωματωμένα προθέματα σε paths θα είναι και πιο ξεκάθαρο και ασφαλέστερο.
Διαλειτουργικότητα και αυστηρότητα: esModuleInterop, allowSyntheticDefaultImportsκαι alwaysStrict
Το TypeScript 6.0 κλειδώνει επίσης αυτό που εδώ και καιρό αποτελεί την προτεινόμενη προεπιλεγμένη συμπεριφορά διαλειτουργικότητας.Δεν μπορείτε πλέον να ορίσετε esModuleInterop or allowSyntheticDefaultImports προς την falseΑυτές οι επιλογές αρχικά ήταν προαιρετικές για να αποφευχθεί η διακοπή λειτουργίας παλαιότερων έργων, αλλά η διατήρησή τους σήμερα συχνά οδηγεί σε ανεπαίσθητα προβλήματα χρόνου εκτέλεσης κατά τον συνδυασμό CommonJS και ESM.
Με την διαλειτουργικότητα πάντα ενεργοποιημένη, ορισμένα μοτίβα εισαγωγής ενδέχεται να χρειαστεί να ενημερωθούν. Για παράδειγμα:
// Old style with esModuleInterop: false
import * as express from "express";
// New style with modern interop always on
import express from "express";
The alwaysStrict η σημαία επίσης δεν μπορεί να οριστεί σε false πιαΤο TypeScript πλέον υιοθετεί σημασιολογία αυστηρής λειτουργίας JavaScript σε όλους τους τομείς, συμπεριλαμβανομένου του τρόπου με τον οποίο οι δεσμευμένες λέξεις και this συμπεριφέρομαι. Εάν έχετε πραγματικά παλιό κώδικα που χρησιμοποιούσε δεσμευμένες λέξεις όπως await or static ως αναγνωριστικά, θα πρέπει να τα μετονομάσετε.
Καταργήθηκε: outFile, παλαιός χώρος ονομάτων module λέξη-κλειδί και εισαγωγή asserts
The --outFile η επιλογή καταργήθηκε στην έκδοση 6.0Η συνένωση πολλαπλών εισόδων σε ένα ενιαίο πακέτο JS είναι μια εργασία που γίνεται καλύτερα από τα εργαλεία Webpack, Rollup, esbuild, Vite, Parcel ή παρόμοια. Το TypeScript διπλασιάζει τον έλεγχο τύπων και την εκπομπή δηλώσεων αντί να προσπαθεί να λειτουργήσει ως πακέτο.
Η παραδοσιακή χρήση του module Η δήλωση ονοματοχώρων είναι πλέον ένα δύσκολο σφάλμαΕπιτρέπονται πρώιμες εκδόσεις TypeScript:
module Foo {
export const bar = 10;
}
Η σύγχρονη, υποστηριζόμενη σύνταξη χρησιμοποιεί namespace:
namespace Foo {
export const bar = 10;
}
Αυτή η αλλαγή είναι απαραίτητη για να αποφευχθεί η σύγκρουση με πιθανές μελλοντικές ECMAScript. module μπλοκΔηλώσεις λειτουργικής μονάδας περιβάλλοντος όπως declare module "some-module" { ... } παραμένουν πλήρως υποστηριζόμενες.
Εισαγωγή δηλώσεων χρησιμοποιώντας asserts είναι επίσης απαρχαιωμένα, επειδή η υποκείμενη πρόταση εξελίχθηκε σε χαρακτηριστικά εισαγωγής χρησιμοποιώντας withΚώδικας όπως:
import blob from "./data.json" asserts { type: "json" };
Θα πρέπει να μεταφερθεί στη νέα μορφή:
import blob from "./data.json" with { type: "json" };
Καταργήθηκε: no-default-lib αναφορές και λίστες αρχείων γραμμής εντολών με tsconfig
The /// <reference no-default-lib="true" /> η οδηγία δεν υποστηρίζεται πλέονΣυχνά παρερμηνευόταν. Εάν χρειάζεται να εξαιρέσετε την προεπιλεγμένη βιβλιοθήκη, χρησιμοποιήστε --noLib or --libReplacement αντίθετα, τα οποία εκφράζουν σαφέστερα την πρόθεση στο επίπεδο διαμόρφωσης.
Μια άλλη μακροχρόνια πηγή σύγχυσης είναι ο τρόπος tsc αντιμετωπίζει ρητά ορίσματα αρχείου όταν ένα tsconfig.json είναι παρούσαΠροηγουμένως, σε λειτουργία tsc foo.ts σε έναν τέτοιο κατάλογο θα αγνοούσε σιωπηλά το αρχείο ρυθμίσεων. Στην έκδοση 6.0, αυτό το σενάριο παράγει ένα σαφές σφάλμα:
error TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.
Αν θέλετε πραγματικά να παρακάμψετε τη διαμόρφωση και απλώς να μεταγλωττίσετε ένα μόνο αρχείο με προεπιλογές, μπορείτε τώρα να χρησιμοποιήσετε tsc --ignoreConfig foo.ts για να καταστήσει σαφή αυτή την πρόθεση.
Προετοιμασία για το TypeScript 7.0
Το TypeScript 6.0 είναι πλήρες σε λειτουργίες και ως επί το πλείστον σε λειτουργία σταθεροποίησηςΑπό εδώ και μέχρι τη γενική διαθεσιμότητα, η ομάδα αναμένει μόνο κρίσιμες διορθώσεις σφαλμάτων. Οι νυχτερινές εκδόσεις δημοσιεύονται τακτικά και η ομάδα διαθέτει επίσης νυχτερινές εκδόσεις του επερχόμενου native (Go-based) TypeScript 7.0 μαζί με μια ειδική επέκταση VS Code για πειραματισμό με τη νέα μηχανή.
Ο οδικός χάρτης είναι σκόπιμα αυστηρός: η έκδοση 7.0 αναμένεται να ακολουθήσει την έκδοση 6.0 σύντομα μετά., επομένως ο βρόχος ανατροφοδότησης σχετικά με τα προβλήματα αναβάθμισης και μετεγκατάστασης θα είναι σύντομος. Εάν βλέπετε προειδοποιήσεις κατάργησης στην έκδοση 6.0, η ισχυρή σύσταση είναι να τις αντιμετωπίσετε τώρα αντί να περιμένετε μέχρι η έκδοση 7.0 να επιβάλει το πρόβλημα.
Η πρακτική ροή εργασίας για τις περισσότερες ομάδες μοιάζει με αυτό: αναβάθμιση σε TypeScript 6.0 RC, διόρθωση του προβλήματός σας types rootDir, αντιμετωπίστε τυχόν αποδοκιμασίες (ή περιορίστε τες προσωρινά) "ignoreDeprecations": "6.0" ενώ επαναλαμβάνετε), και εκτελείτε με --stableTypeOrdering εάν χρειάζεται να συγκρίνετε εξόδους ή να προετοιμάσετε αγωγούς CI για την ντετερμινιστική ταξινόμηση της έκδοσης 7.0. Μόλις αυτό γίνει, η μετάβαση στον μεταγλωττιστή που βασίζεται σε Go θα πρέπει να μοιάζει με αναβάθμιση της απόδοσης και όχι με μια προβληματική επανεγγραφή.
Συνολικά, το TypeScript 6.0 RC αφορά λιγότερο την λαμπερή σύνταξη και περισσότερο το στήσιμο του σκηνικού.: εγγενής ταχύτητα στην έκδοση 7.0, καθαρότερες διαμορφώσεις, σύγχρονες προεπιλογές και τυποποιημένα API όπως τα Temporal και ES2025 ενσωματωμένα που διευκολύνουν την καθημερινή κωδικοποίηση. Αν το υιοθετήσετε τώρα, διορθώσετε τα bits με θόρυβο και βασιστείτε στις νέες προεπιλογές, θα είστε σε πολύ καλύτερη θέση όταν εμφανιστεί ο εγγενής μεταγλωττιστής.
