I-TypeScript 6.0 RC: izici, izinguquko eziphulayo kanye nendlela yokulungiselela

Isibuyekezo sokugcina: 03/17/2026
  • I-TypeScript 6.0 RC iwukukhishwa kokugcina kwe-compiler okusekelwe ku-JS futhi ivumelanisa ukuziphatha, okuzenzakalelayo kanye noku-oda ne-Go-based TypeScript 7.0 ezayo.
  • Ukukhishwa kuqinisa okuzenzakalelayo kwesimanje (amamojula aqinile, e-ESNext, e-ES2025), kwethula ama-API e-Temporal, e-ES2025 kanye nokuthayipha okusha kwe-Map upsert kanye ne-RegExp.escape.
  • Izinguquko zokucushwa kokhiye zifaka phakathi i-array yezinhlobo ezizenzakalelayo ezingenalutho, i-rootDir ezenzakalelayo kufolda yokucushwa, kanye nokuhoxiswa kwe-ES5, izinhlelo zemojula ezindala, i-baseUrl kanye nezindlela zokuxazulula ifa.
  • Amaqembu akhuthazwa ukuthi athuthukele ku-6.0, alungise ukuhoxiswa kwemisebenzi futhi asebenzise ngokuzithandela i--stableTypeOrdering ukuqinisekisa indlela yokuthuthela ebushelelezi ku-TypeScript 7.0.

Ikhandidethi yokukhishwa kwe-TypeScript 6.0

I-TypeScript 6.0 isifinyelele ngokusemthethweni ingqophamlando ye-Release Candidate (RC), futhi akusikho nje okunye ukubuyekezwa okuqhubekayo. Lena inguqulo yokugcina enkulu esebenza ekusetshenzisweni kweJavaScript isikhathi eside kwensizakalo ye-compiler kanye nezilimi, ngaphambi nje kokuba iphrojekthi ifinyelele enjinini entsha, esekelwe ku-Go ku-TypeScript 7.0. Lokho kukodwa kwenza i-6.0 ibe ukukhishwa okubalulekile: yibhuloho okufanele uliwele ngaphambi kokuba konke okungaphansi kwe-hood kushintshe.

Ungaqala ukuzama i-RC namuhla ngokuyifaka kusukela ku-npm nge:

npm install -D typescript@rc

Umqondo oyinhloko ngemuva kwe-TypeScript 6.0 ukulungiselela nokuqondanisa. Le nguqulo ishelela indlela kusukela ku-5.9 kuya ku-7.0, iqinisa okuzenzakalelayo, isusa umthwalo wesikhathi esidlule, futhi ingeza izici ezimbalwa eziqondiwe ezibonisa ukuziphatha kwesikhathi esizayo noma ezidalula amakhono e-JavaScript azayo njenge-Temporal, ama-ES2025 API, kanye nezindlela ze-Map "upsert". Endleleni, kunezinye izinguquko zesistimu yohlobo olucashile, amafulegi amasha e-compiler, kanye nokuzenzakalelayo kokucushwa okuzothinta ngokuphelele amaphrojekthi angempela—ikakhulukazi eduze. types, rootDir, kanye nokuqina.

I-TypeScript 6.0 njengebhuloho eliya ku-7.0 esekelwe ku-Go

I-TypeScript 6.0 iklanyelwe ngokusobala njengokukhishwa kokugcina okukhulu ku-JavaScript codebase ekhonaIthimba le-TypeScript belilokhu libhala kabusha isevisi ye-compiler kanye ne-language ibe yi- imoto nativo en Go, besebenzisa ukusebenza kwemvelo kanye nokulingana kwenkumbulo okwabiwe. Leyo njini entsha izoqala ukusebenza njenge-TypeScript 7.0 nangale kwalokho, kanti i-6.0 iphambi kwayo njengesigaba sokushintsha.

Iningi lezinguquko eziphukile kanye nokwehla kwe-6.0 kulapho ukuze kuqinisekiswe ukuthi i-7.0 yakho yesikhathi esizayo iyasinda.Izinketho ezingakwazi ukusekelwa kahle kuzakhiwo zomdabu, izinhlelo zamamojula amadala, kanye nezimo ezingavamile ezinde ziyasuswa noma zimakwe ngokusobala njengezingasasebenzi nge-escape hatch: ungasetha "ignoreDeprecations": "6.0" e lakho tsconfig.json ukucindezela ukuxilongwa kwe-deprecation ku-6.0. Kodwa lelo fulegi ngeke likusize ku-7.0—lezo zinketho zihlelelwe ukunyamalala ngokuphelele.

Uma ulingeka ukuthi “ulinde u-7.0” ngaphambi kokwenza noma yikuphi ukuhlanza izilungiselelo, lokho kuyisithiyoI-6.0 RC inguqulo lapho kufanele ulungise khona i-akhawunti yakho. tsconfig, yenza izinhlobo zibe zijwayelekile, futhi ubhekane namafulegi angasebenzi kahle. Ukwenza ukugxuma okukhulu okubili (5.x → 7.0) kuzohlala kulimaza kakhulu kunokuya ku-5.x → 6.0 → 7.0 ngezinguquko ezincane, ezilawulwayo.

Yini eshintshile kusukela ku-beta engu-6.0

Phakathi kwe-beta ne-RC, ithimba le-TypeScript ligxile kakhulu ekuhlanganiseni ukuziphatha nenjini ye-7.0 yesikhathi esizayo, kanye nokulungiswa okumbalwa okuqondiwe ekuhlolweni kohlobo kanye nokuthayipha kwe-DOM.

Ushintsho olulodwa olubalulekile luthinta ukuhlolwa kohlobo lwezinkulumo zomsebenzi ezidluliselwe kumakholi ajwayelekile, ikakhulukazi ezimweni ze-JSX. Lapho imisebenzi ejwayelekile isetshenziswa ngama-callback (isibonelo ku-React noma kwezinye izingxenye ze-JSX), i-RC iqinisa ukuphetha ukuze ibonise ngokunembile lokho okuzokwenziwa yi-7.0. Empeleni, ungase uqaphele ukuthi ezinye izingcingo ezithembele ekuphetheni okungabonakali manje zidinga impikiswano yohlobo olucacile ukuze kugcinwe ukuhlolwa kohlobo kujabule, kodwa uzophinde uthole amaphutha amaningi angempela kukhodi ekhona.

Ukususwa kwe-syntax yokuqinisekisa ukungeniswa nakho kunwetshiweI-TypeScript yayivele ixwayisa ngokudala import ... assert {...} i-syntax ekungenisweni okungaguquki ngenxa yesiphakamiso se-ECMAScript esishintshela kuzimfanelo zokungenisa nge withManje, lokho kwehla kusebenza nasekungenisweni okuguquguqukayo kusetshenziswa import() ngezinto zokuqinisekisa ezifana import(..., { assert: {...}}). Isiqondiso sicacile: hamba uye ekungeniseni izimfanelo yonke indawo.

Izinhlobo zelabhulali ye-DOM zivuselelwe ukuze zihambisane nezindinganiso zamanje zepulatifomu yewebhu, kufaka phakathi izibuyekezo kuma-API ahlobene ne-Temporal ezimweni zewebhu. Uma wakha izinhlelo zokusebenza zesiphequluli, uzuza ekuthayipheni okunembe kakhudlwana kanye namathuluzi omhleli angcono azungeze lawa ma-API amasha.

Ukuzwela okuncane komongo wemisebenzi engasetshenziswa this

I-TypeScript 6.0 yethula ushintsho olucashile kodwa olusebenzayo kakhulu endleleni ephatha ngayo imisebenzi ngaphandle kokuchazwa okucacile this ukusetshenziswa ngesikhathi sokuhlolwa kohloboNgokomlando, imisebenzi enemingcele engenazo izinhlobo ezicacile ingabhekwa njenge "ebucayi ngokwezimo", okusho ipharamitha yayo kanye this izinhlobo zincike ekutheni zisetshenziswe kuphi. Lokho kuthinta ukuqagela okuvamile futhi kungaholela ekuziphatheni okungajwayelekile kuye nge-syntax yomsebenzi.

Cabanga ngomsizi ojwayelekile osebenzisa umkhiqizi kanye nomthengi:

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,
});

Kodwa nge-syntax yendlela, ukuziphatha kwangaphambilini kungamangaza. I-logic efanayo, ebhalwe njengezindlela, ingase yehluleke lapho izakhiwo zihlelwa kabusha, ngoba i-TypeScript yeqa imisebenzi "ezwela ngokwesimo" lapho iphetha izimpikiswano ezijwayelekile. Izindlela ngokusobala zine- this ipharamitha, eyabafaka kuleso sigaba esibucayi noma ngabe this akukaze kubhekiselwe kukho.

Ku-6.0, imisebenzi engakaze ifundwe this manje seziphathwa njengezingazweli kakhulu ngokomongo. Beka ngendlela ehlukile, uma umhlanganisi ebona lokho this ayisetshenziswa nhlobo ngaphakathi komsebenzi, ngeke ijezise lowo msebenzi ngesikhathi sokuphetha. Lokho kusho ukuthi i-syntax yendlela kanye ne-syntax yomcibisholo manje sezivumelana kakhulu ezimweni ezijwayelekile zokuphetha, futhi ukuziphatha okungajwayelekile "okusebenza ngokulandelana kwempahla eyodwa, kwehluleka kwenye" ​​kuyanyamalala kulezi zimo.

Lolu shintsho luthuthukisa ukubekwa phambili kwabazongenela ukhetho lokukhetha uhlobo: imisebenzi ngaphandle kwe-esetshenzisiwe this iba imithombo yolwazi ebaluleke kakhulu lapho kucatshangelwa izimpikiswano zohlobo olufana nolwe- T. Umphumela awuve ungaqondakali kangako unknown izinhlobo kanye nokucabanga okuzinzile kakhulu kuzo zonke izibikezelo. Lo msebenzi unikelwe nguMateusz Burzyński.

Ukusekelwa kwe-Node #/ ukungeniswa kwezindlela ezingaphansi komhlaba

Isici se-Node esithi “subpath imports” sivumela amaphakheji ukuthi achaze ama-alias okungenisa angaphakathi nge- imports insimu ku package.json. Lawa ma-alias enza kube lula ukungenisa ngokugwema izindlela ezijulile ezihlobene. Ngaphambilini, ukhiye ngamunye we-subpath kwakufanele okungenani ube nengxenye eyodwa ngemva kokuqala #, okwakungumkhawulo omncane kodwa ocasulayo kubantu ababevame ukuhlanganisa izimiso ezifana @/....

I-TypeScript 6.0 manje isekela ukungeniswa kwe-subpath okuqala ngo #/, okuhambisana nokuziphatha okusha kwe-Node 20. Lokhu kusho ukuthi ungasebenzisa ukucushwa okufana nalokhu:

{
  "name": "my-package",
  "type": "module",
  "imports": {
    "#": "./dist/index.js",
    "#/*": "./dist/*"
  }
}

Ngalesi sethaphu, amamojula ngaphakathi kwephakheji—ngisho nabathengi—angangenisa nge-fup #/... isimaphambili esikhundleni sezindlela ezinde ezifana ../../utils.jsI-TypeScript iyaqonda le phethini uma --moduleResolution isethelwe node20, nodenext, noma bundler, elingisa ukuchazwa kweNode yanamuhla. Lokhu kuthuthukiswa kwaqaliswa ngumbhali we-magic-akari.

Ukusebenzisa --moduleResolution bundler nge --module commonjs

Ngaphambilini, --moduleResolution bundler ingasetshenziswa kuphela nge --module esnext or preserveNgokungahlonishwa kwabadala node/node10 imodi yokuxazulula imodyuli, amaphrojekthi amaningi ayedinga indlela yokufuduka efanelana nomphumela wawo wamanje we-CommonJS.

I-TypeScript 6.0 manje ivumela ukuhlanganiswa --moduleResolution bundler nge --module commonjs. Le nhlanganisela ivame ukuba yisinyathelo esisebenzayo sama-codebases asakhipha i-CommonJS kodwa esiya emisebenzini yokusebenza egxile ku-bundler noma i-logic entsha yesisombululo. Ukusuka lapho, amaphrojekthi angahlela ukuthuthela isikhathi eside kunoma yikuphi:

  • module: "preserve" nge moduleResolution: "bundler" kwezinhlelo zokusebenza zewebhu ezihlanganisiwe kanye nokusethwa okufanayo, noma
  • module: "nodenext" kwezindawo eziqondisa ngqo ama-Node.js anamuhla.

Lolu shintsho lubaluleke kakhulu kumaqembu ashiyayo moduleResolution: node Ngemuva kodwa awukakulungeli ukwamukela ngokugcwele umkhiqizo we-ESM okwamanje. Ikunikeza umzila ohlukaniswe ngezigaba esikhundleni sewa.

The --stableTypeOrdering ifulegi ukuze ulingise ukuhleleka kwe-7.0

Enye yezithuthukisi ezinkulu zezakhiwo ezizayo ku-TypeScript 7.0 ukuhlola uhlobo olufanayoUkusebenzisa ama-checker amaningi ngesikhathi esifanayo kusho ukuthi izingxenye ezahlukene zohlelo zingavakashelwa ngama-oda ahlukene. Uma ama-ID ohlobo kanye nokuhleleka kwezimpawu kuncike ku-oda lokuvakasha, ungagcina ngokuhleleka kwenyunyana okunganqunyelwe, ukuhleleka kwempahla, kanye nomehluko ongavamile ekuxilongweni.

Izinguqulo ezindala ze-TypeScript zinikeza ama-ID ohlobo lwangaphakathi ngokusekelwe ku-oda lokuhlangana. Lawo ma-ID abe esesetshenziselwa ukuhlunga izinto ezifana nezinhlobo ze-union kanye nezakhiwo. Yingakho ukuhlela okubonakala kungenangozi—njengokwethula okusha const ngaphambi komsebenzi okhona—ungaguqula ukuhleleka kwama-union angokoqobo ku-emissioned .d.ts amafayela, noma ushintshe indlela ezinye izinhlobo eziphrinta ngayo kumhleli wakho.

I-TypeScript 7.0 ishintshela ekuhleleni okusekelwe kokuqukethwe kwezinto zangaphakathi okunqunyiwe. Lonke uhlobo noma uphawu luhlelwe ngokwesakhiwo salo, hhayi ngokulandelana kokuvakasha okungahleliwe, ngakho uhlelo olufanayo luzohlala luveza ukuhleleka okufanayo kungakhathaliseki ukufana noma ukuhleleka kokuhlanganiswa. Lokho kususa imfihlakalo ethi "kungani inyunyana yami yashintsha ngokuzumayo?".

Ukuze sikusize uqhathanise ukuziphatha phakathi kuka-6.0 no-7.0, i-RC yethula --stableTypeOrderingUma leli fulegi livuliwe, i-TypeScript 6.0 isebenzisa i-algorithm efanayo yokuhlela uhlobo olunqunyiwe esetshenziswa yi-7.0. Umphumela uba umehluko omncane kakhulu kumafayela okumemezela akhishwe kanye nokuqhathaniswa okubikezelwayo phakathi kokukhipha okungu-6.x no-7.x.

Kodwa-ke, ukuzimisela akukhululekile. Inika amandla --stableTypeOrdering Kunganciphisa ijubane lokuhlola uhlobo cishe ngo-25% kuye ngokuthi i-codebase yakho ikuphi. Kuhloselwe ukusiza ekuxilongeni nasekufudukeni, hhayi ukulungiselelwa kokusebenza okuhlala njalo.

Uma ubona amaphutha ohlobo kuphela uma --stableTypeOrdering ivuliwe, ngokuvamile kusho ukuthi ikhodi yakho yangaphambilini yayithembele ekuhleleni okudala kwezinhlobo okungahleliwe ukuze kuqondiswe ukuthi "usebenza nje". Ukulungiswa kuvame ukuhilela ukwenza izinhlobo zibe sobala—ukwengeza impikiswano yohlobo kukholi ejwayelekile eyinkinga, noma ukufaka isichasiselo se-variable esinesibonisi esithile esikhundleni sokuthembela ngokuphelele ekuqondisweni kwento eyinkimbinkimbi.

New es2025 izinketho zethagethi kanye ne-lib

I-TypeScript 6.0 ingeza i- es2025 inketho yakho kokubili target futhi libNakuba i-ES2025 ingethuli i-syntax entsha eyinhloko uma iqhathaniswa neminyaka edlule, iphinda ibe nama-API amaningana ajwayelekile ayekade evalwe ngemuva. esnext.

Ngokuqondisa noma ukufaka es2025, uthola ukuthayipha okubuyekeziwe kwezakhelwe ngaphakathi ezintsha like RegExp.escape, futhi amanye ama-API asusiwe ku esnext ku es2025Lokho kufaka phakathi izinto ezifana Promise.try, abasizi bokuphindaphinda, kanye nabanye abengeziwe Set izindlela ezifinyelele ukuvuthwa okugcwele kwemininingwane. Lo msebenzi unikelwe nguKenta Moriuchi.

Indaba ebanzi ukuthi okuzenzakalelayo target ku-6.0 manje ilandelela unyaka wamanje we-ECMAScript, okwamanje okukufaka ku-ES2025 uma ungacacisi ithagethi. Lokho kufanelana kangcono neqiniso lezikhathi zokusebenza ezihlala ziluhlaza kanye namathuluzi esimanje.

Izinhlobo ezakhelwe ngaphakathi ze-Temporal API

Isiphakamiso sesikhashana esilindelwe isikhathi eside sesifinyelele esigabeni sesi-3 futhi kulindeleke ukuthi sithathe indawo yesaziwayo Date I-API yomsebenzi wosuku/wesikhathi obalulekileI-TypeScript 6.0 manje ithumela ukuthayipha kweklasi eliphezulu kwe-Temporal, ukuze uqale ukubhala ikhodi esekelwe kwi-Temporal ngokuphepha kohlobo oluphelele kanye nokusekelwa komhleli.

Ukuze unike amandla izinhlobo zesikhashana, ungasebenzisa --target esnext noma lungiselela ama-libs akho ngokucacile ngento efana nale:

{
  "compilerOptions": {
    "lib": 
  }
}

Noma ungakhetha ukungena kwi-subset yesikhashana kuphela nge "esnext.temporal" uma ufuna ukucushwa okune-granular. Uma sekuvuliwe, ungabhala ikhodi ngokulandelana kwalokhu:

let yesterday = Temporal.Now.instant().subtract({
  hours: 24,
});

let tomorrow = Temporal.Now.instant().add({
  hours: 24,
});

console.log(`Yesterday: ${yesterday}`);
console.log(`Tomorrow: ${tomorrow}`);

I-Temporal isivele isekelwa kwezinye izikhathi zokusebenza futhi ingagcwaliswa nge-polyfill kwezinye, ngakho-ke lezi zinhlobo zingasetshenziswa ngempela namuhla. Imibhalo iyavela ku-MDN (kunezikhala ezithile ezisagcwaliswa). Ukuthayipha kunikelwe ngumsebenzisi we-GitHub uRenegade334.

Usekelo oluphakanyisiwe: Map.getOrInsert futhi getOrInsertComputed

Abathuthukisi beJavaScript bebebhala ngesandla amaphethini athi “hlola-bese-setha-bese-thola” ku- Map iminyakaIphethini evamile ihlola ukuthi ukhiye ukhona yini, isetha okuzenzakalelayo uma kungenjalo, bese ekugcineni ibuyisa inani—i-boilerplate okulula ukuyiphutha noma ukuyiphinda yonke indawo.

Isiphakamiso se-ECMAScript "soku-upsert" (manje esisigaba sesi-4) sethula getOrInsert futhi getOrInsertComputed on Map futhi WeakMapI-TypeScript 6.0 inezela ukwesekwa kohlobo lwalezi zindlela ku- esnext lib, ukuze uqale ukubhala ama-upsert amaningi achazayo ngokushesha.

With getOrInsert, iphethini ephindaphindayo efana nale:

function processOptions(compilerOptions: Map<string, unknown>) {
  let strictValue: unknown;
  if (compilerOptions.has("strict")) {
    strictValue = compilerOptions.get("strict");
  } else {
    strictValue = true;
    compilerOptions.set("strict", strictValue);
  }
  // ...
}

Ingagoqwa ibe umugqa owodwa:

function processOptions(compilerOptions: Map<string, unknown>) {
  let strictValue = compilerOptions.getOrInsert("strict", true);
  // ...
}

Umngane getOrInsertComputed ilungele okuzenzakalelayo okubizayo—kudinga i-callback esetshenziswa kuphela uma ukhiye ungekho. Lokho ku-callback kungathola ngisho nokhiye njengepharamitha, okukuvumela ukuthi uthole okuzenzakalelayo kukhiye uqobo. Ukuthayipha kwe-TypeScript kubamba lezi zindlela zokuziphatha ngokunembile, sibonga futhi ngeminikelo evela ku-Renegade334.

RegExp.escape kanye nokwakhiwa kwe-regex okuphephile

Uma wake wahlanganisa izintambo ezinikezwe ngumsebenzisi zibe yindlela ejwayelekile, uyazi ukuthi kufanele ubalekele izinhlamvu ezikhethekile kuqala—kodwa ama-codebase amaningi asebenzisa kabusha i-escape kumsizi noma akhohlwe ngokuphelele. Isiphakamiso se-RegExp Escaping (manje esiyisigaba sesi-4) silinganisa lokhu nge RegExp.escape.

I-TypeScript 6.0 iveza izinhlobo ze RegExp.escape ngaphansi kwe es2025 libLokho kusho ukuthi uma uhlose noma ufaka i-ES2025, ungabhala ngokuphephile abasizi abanjengalaba:

function matchWholeWord(word: string, text: string) {
  const escapedWord = RegExp.escape(word);
  const regex = new RegExp(`\\b${escapedWord}\\b`, "g");
  return text.match(regex);
}

Akusekho sidingo somsebenzi wokuphunyuka ogoqwe ngesandla, futhi i-TypeScript izoqonda ngokugcwele futhi ihlole i-API ngokuthayipha. Lokhu okungeziwe, njengomsebenzi oqondiwe we-ES2025, kuvela ku-Kenta Moriuchi.

dom i-lib manje ifaka phakathi ama-API okuphindaphinda kanye nokuvumelanisa

Ngokomlando, i-TypeScript yahlukanisa ukwesekwa kwe-DOM iterator ku dom, dom.iterable, Futhi dom.asynciterableUma ubufuna ukuphinda ubhale kabusha NodeList or HTMLCollection nge for...of, bekufanele ukhumbule ukwengeza dom.iterable e lakho "lib" ukucushwa eceleni domLokhu kwakuwumthombo ovamile wokudideka, ikakhulukazi njengoba zonke iziphequluli zesimanje zisekela ama-iterable kanye nama-async ama-iterable kumaqoqo e-DOM.

Ku-TypeScript 6.0, lib.dom.iterable.d.ts futhi lib.dom.asynciterable.d.ts zihlanganiswe ngempumelelo ku- lib.dom.d.tsLokho kusho ukusebenzisa "dom" kuphela manje kukunikeza ukuziphatha okuguquguqukayo nokungavumelani ngokuzenzakalelayo.

Usengakhuluma dom.iterable futhi dom.asynciterable e lakho tsconfig, kodwa lawo mafayela manje asengamagobolondo angenalutho. Uma ukulungiselelwa kwakho kwangaphambilini kubukeke kanje:

{
  "compilerOptions": {
    "lib": 
  }
}

Ungakwazi ukwenza kube lula ngokuphepha "dom", kanye nokuphindaphinda kwamaqoqo e-DOM afana document.querySelectorAll("div") ngizoqhubeka nokuthayipha ukuhlola:

for (const element of document.querySelectorAll("div")) {
  console.log(element.textContent);
}

Lokhu kuwukuhlanza okuncane kodwa okwamukelekile okuvumelanisa i-DOM lib ezenzakalelayo neqiniso leziphequluli zamanje futhi kususa enye i-gotcha ekusethweni kwephrojekthi.

Okuzenzakalelayo, ukuhoxiswa, kanye nokwephulwa kwezinguquko ku-TypeScript 6.0

Ngale kwama-API acwebezelayo, i-6.0 yenza ezinye zezinguquko ezivezwe kakhulu kokuzenzakalelayo kwe-TypeScript kusukela ku-1.0Lezi zinguquko zibonisa uhlelo lwamanje lwe-JavaScript: izikhathi zokusebenza ezihlala ziluhlaza, i-ESM njengesisekelo, ukusetshenziswa kabanzi kwama-bundler, kanye nesifiso esinamandla sokuthayipha nokusebenza okuqinile.

Ithimba liqokomisa izitayela ezimbalwa ezibanzi ezisekela lezi zinqumo: I-ES5 kanye neziphequluli ezindala ngempela sezicishe zaphela; izinhlelo zemojula ye-AMD/UMD azinamsebenzi; cishe yonke into ithunyelwa njengamamojula manje; ukuthayipha okuqinile kuyinto evamile; futhi ukusebenza kufanele kuhlale kuphambili futhi kuphakathi, ikakhulukazi njengoba i-7.0 iletha ukuhlolwa okuhambisanayo.

Ngenxa yalokho, i-TypeScript 6.0 kanye ne-7.0 zakhiwa ngokuzenzakalelayo kwesimanje kanye "nama-valve okuphunyuka aselegacy" ambalwa.. Ku-6.0 RC, ungathulisa okwesikhashana ukuhoxiswa ngokusetha "ignoreDeprecations": "6.0" e lakho tsconfig, kodwa lezo zinketho ngeke zibe khona ku-7.0. Ezinye izinguquko zingenziwa ngokuzenzakalela ngamathuluzi afana nokuhlola ts5to6 i-codemod, engasiza ekubhaleni kabusha izinto ezifana baseUrl futhi rootDir ukucushwa kuyo yonke iphrojekthi.

Izinguquko ezimbili ezizodingeka ngokushesha kumaphrojekthi amaningi

Nakuba kunohlu olude lokuyeka ukusebenza, izinguquko ezimbili zokucushwa cishe zizolimaza inani elikhulu kakhulu lama-codebases:

  • Setha ngokucacile types i-array (ngokujwayelekile kanye nohlaka lwakho lokuhlola). Ngaphandle kwalokhu, uzolahlekelwa izinhlobo ze-ambient ezifakiwe ngokuzenzakalela kusuka ku- @types/*.
  • Kusethwe ngokusobala rootDir (ngokuvamile "./src") uma uthembele "ekucabangeni kwezimpande ezivamile" okudala. Ngaphandle kwalokho isakhiwo sakho sefayela esikhishelwayo singashintsha ngezindlela ezicashile.

Izimpawu zokulahleka types faka phakathi amaphutha amaningi mayelana nama-globals afana process, fs, path, noma describe ukungachazwaIzimpawu zokushintsha rootDir kumayelana nezindlela zokukhipha ngokungazelelwe ukuthola okwengeziwe src ingxenye (isibonelo dist/src/index.js esikhundleni se dist/index.js).

Okuzenzakalelayo okubuyekeziwe kwamaphrojekthi esimanje

Izinketho eziningana ze-compiler manje zinamanani amasha azenzakalelayo afana nendlela izinhlelo zokusebenza eziningi ezintsha ezakhiwe ngayo empeleni:

  • strict manje sekuyi-default true. Imodi eqinile ayiseyona into yokunethezeka yokukhetha ukungena; iyisisekelo. Uma ubuthembele ekuziphatheni okungekho emthethweni, kuzodingeka usethe ngokucacile "strict": false (yize uzophuthelwa isigaba esikhulu sokuhlolwa kokuphepha).
  • module manje sekuyi-default esnext, okubonisa ukuthi i-ESM iyifomethi yemojula evelele futhi idlala kahle kakhulu ngama-bundler kanye ne-Node yesimanje.
  • target okuzenzakalelayo onyakeni wamanje we-ECMAScript (ngokusebenza kahle i-ES2025 njengamanje), beqaphela ukuthi ukusetshenziswa okuningi kuhlose izindawo ezihlala ziluhlaza noma kudlule ku-bundler engase yehle kakhulu uma kudingeka ngempela.
  • noUncheckedSideEffectImports Manje true ngephutha, okukusiza ukuthi uthole amaphutha okubhala noma izindlela ezimbi ekungenisweni okufakiwe ngenxa yemiphumela emibi kuphela.
  • libReplacement okuzenzakalelayo ku- false, ukugwema inqwaba yezinqumo eziningi zemodyuli ezihlulekile futhi ubheke ngaphezulu kuze kube yilapho iphrojekthi ikhetha ngokusobala ukuziphatha okukhethekile kwe-lib.

Uma noma yikuphi kwalokhu okuzenzakalelayo okusha kuphula ukwakheka kwakho, konke kungabhalwa ngaphezulu ngokusobala ku- tsconfig.jsonKodwa inhloso iwukuthi amaphrojekthi amasha kufanele “enze into efanele” ngaphandle kokucushwa okwengeziwe.

rootDir manje sekuyi-default ku-config directory

Ngaphambilini, uma ungacacisanga rootDir, I-TypeScript izame ukuthola impande yomthombo ojwayelekile ngokusekelwe kuwo wonke amafayela angewona awesimemezelo ohlelweni. Lokho kwenze kwaba nzima ukucabanga ngemingcele yephrojekthi futhi kwadinga ukuskena izindlela eziningi zamafayela ukuze nje kunqunywe ukuthi i-emit kufanele isuselwe kuphi.

Ku-TypeScript 6.0, okuzenzakalelayo rootDir kumane nje kuyisikhombisi esiqukethe tsconfig.json. Ukuziphatha okudala kokuqagela kusebenza kuphela uma ugijima tsc emgqeni womyalo ngaphandle kwanoma yikuphi tsconfig kube bonke.

Lolu shintsho lusho ukuthi amaphrojekthi anamafayela omthombo ajule kakhulu kunesikhombisi sokucushwa kufanele asethwe ngokusobala rootDir. Ukusetha okuvamile kungaba:

{
  "compilerOptions": {
    // ...
    "rootDir": "./src"
  },
  "include": 
}

Uma ukucushwa kwakho kubhekisela kumafayela angaphezu kwe- tsconfig indawo, kuzodingeka futhi unwebe rootDir ngokufanele, Ngokwesibonelo "rootDir": "../src" kwezinkomba zomthombo ezabiwe.

types manje sekuyi-array engenalutho ngokuzenzakalelayo

Lokhu kungenye yezinguquko ezithinta kakhulu amaphrojekthi angempela. Ngokomlando, uma ungacacisanga types in compilerOptions, i-TypeScript izofaka ngokuzenzakalelayo konke okungaphansi node_modules/@typesLokho bekuyinto elula, kodwa futhi kubiza kakhulu futhi kuyaphuka: izindawo zokugcina zanamuhla zivame ukudonsa amakhulu @types amaphakheji ngokushintshashintshayo.

Ku-TypeScript 6.0, types okuzenzakalelayo ku- [], okusho ukuthi awekho amaphakheji ohlobo lwe-ambient alayishwa ngokuzenzakalelayoManje usukhetha ukungena ngokusobala ezindaweni zomhlaba ozidingayo ngempela, isibonelo:

{
  "compilerOptions": {
    "types": 
  }
}

Lokhu kunganciphisa isaphulelo esingu-20-50% ezikhathini zokwakha kwamanye amaphrojekthi, ngoba umqoqi akasadingeki ukuthi ahambe kuwo wonke amafayela okumemezela ngaphansi @typesUma ufuna ngempela ukuziphatha okudala kokuthi “layisha konke”, ungacacisa:

{
  "compilerOptions": {
    "types": 
  }
}

Uma ngokuzumayo ubona amaphutha afana nokuthi “Ayikwazi ukuthola igama elithi 'inqubo'” noma “Ayikwazi ukuthola imodyuli ethi 'fs'”, leso yisibonakaliso sakho ongasifaka node (kanye nanoma yiziphi ezinye izinhlobo zokuhlola/zesikhathi sokusebenza othembele kuzo) ku- types uhlu.

Kuhoxisiwe: target: es5 futhi --downlevelIteration

Ukuqondisisa i-ES5 manje sekuhoxisiwe. Njengoba isiphequluli ngasinye esifanele sithumela i-ES2015+ iminyaka eminingi futhi i-Internet Explorer isiphumile, umkhiqizo we-ES5 awusabhekwa njengofanele ubunzima ngaphakathi kwe-TypeScript uqobo. Inhloso ephansi kakhulu esekelwayo phambili yi-ES2015. Uma kufanele uthumele i-ES5 ngempela, isincomo ukusebenzisa i-transpiler yangaphandle (njenge-Babel noma ipayipi le-bundler) kungaba kumthombo wakho we-TS noma kumkhiqizo we-TS.

The --downlevelIteration ifulegi nalo alikho emthethweni, ngoba ukusetshenziswa kwayo okuwukuphela kwento enenjongo kwakuwukulungisa ukuziphatha kokukhipha ama-targets e-ES5. Ku-TypeScript 6.0, ukusetha downlevelIteration kuzodala iphutha lokuyeka ukusebenza. Uma uku-ES2015 noma okusha, ifulegi alikaze libe nomthelela noma kunjalo.

Kuhoxisiwe: --moduleResolution node kanye nefa classic

The node (aka node10) imodi yokuxazulula imodyuli ayisebenzi. Yakha umodeli wokuziphatha kwe-Node 10 kodwa ayifani ne-ESM ye-Node yesimanje kanye ne-semantics yesisombululo. Amaphrojekthi kufanele ashintshele kunoma yikuphi nodenext (ngezinhloso eziqondile zeNode) noma bundler (ezindaweni eziqhutshwa yi-bundler njengezinhlelo zokusebenza zewebhu noma i-Bun).

Eyokuqala moduleResolution: classic isu nalo lisusiwe. Lena kwakuyindaba yesisombululo sangaphambi kwe-Node se-TypeScript. Namuhla, zonke izimo ezisebenzayo zikhonzwa kangcono yi nodenext or bundler, ngakho-ke i-classic isetshenzisiwe ukunciphisa ubunzima kanye namacala onqenqema.

Ihoxisiwe: AMD, UMD, SystemJS, kanye module: none

Okulandelayo module amanani manje awasasetshenziswa futhi awasekelwa nhlobo:

  • amd
  • umd
  • systemjs
  • none

Lezi zakhiwo zazibaluleke kakhulu enkathini yangaphambi kwe-ESM, lapho iziphequluli zingenalo ukwesekwa kwemojula yemvelo futhi abathuthukisi bethembele ku-AMD, UMD, noma i-SystemJS ukuze bagcwalise igebe. Namuhla, ama-ESM plus bundlers noma amamephu okungenisa aphatha cishe zonke izimo zokusetshenziswa kwangempela, futhi "akukho" akukaze kuchazwe kahle kakhulu.

Uma usaqondisa lawa mafomethi emojuli yefa, isincomo ukuthi uthuthele endaweni ekhipha i-ESM bese uthembela ku-bundler noma ku-compiler ehlukile ukuze upakishe okokugcina—noma uhlale ku-TypeScript 5.x kuze kube yilapho uhlelo lokufuduka selukhona. Njengengxenye yalokhu kuhlanza, okudala amd-module isiqondiso naso siyasuswa.

Kuhoxisiwe: baseUrl

The baseUrl inketho ibilokhu ingumthombo wokuziphatha kwesisombululo semojuli okuxakile, okunzima ukukulungisaAmaphrojekthi amaningi ayisebenzise njengesiqalo nje se- paths okufakiwe, kodwa i-TypeScript iphinde yakuphatha njengempande yokubheka okujwayelekile, okubangela ukungeniswa okufana "someModule" ukuzimisela src/someModule.js ngokungalindelekile lapho unjiniyela ayehlose ukusekela ama-alias enziwe ngokwezifiso afana nalawa @app/*.

Ngo 6.0, baseUrl ayisebenzi futhi ngeke isasetshenziswa njengempande yokubheka. Akudingeki ukuthi kube nemephu yendlela baseUrl isikhathi eside, ngakho-ke ukufuduka okunconywayo kumane nje ukugoqa isiqalo sibe yinye ngayinye paths ukungena. Isibonelo:

// Before
{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "@app/*": ,
      "@lib/*": 
    }
  }
}

// After
{
  "compilerOptions": {
    "paths": {
      "@app/*": ,
      "@lib/*": 
    }
  }
}

Ezimweni ezingavamile kuphela lapho usebenzise khona ngempela baseUrl njengempande yokubheka ejwayelekile Ungadinga yini ukuphinda lokho kuziphatha ngemephu yendlela yokubamba yonke into efana nalokhu:

"paths": {
  "*": ,
  "@app/*": ,
  "@lib/*": 
}

Kwamaqembu amaningi, ukususa nje baseUrl kanye neziqalo ezifakwe ngaphakathi paths kuzoba sobala futhi kuphephe.

Ukuxhumana okuqinile kanye nokuqina: esModuleInterop, allowSyntheticDefaultImports, Futhi alwaysStrict

I-TypeScript 6.0 iphinda ivale lokho obekulokhu kuyisenzo sokuzenzakalelayo esinconywayo se-interopAwusakwazi ukusetha esModuleInterop or allowSyntheticDefaultImports kuya falseLezi zinketho ekuqaleni zazikhethwe ukugwema ukuphula amaphrojekthi amadala, kodwa ukuzigcina zingasebenzi namuhla kuvame ukuholela ezinkingeni zesikhathi sokusebenza ezicashile lapho kuhlanganiswa i-CommonJS ne-ESM.

Njengoba i-interop ivuliwe njalo, amaphethini athile okungenisa angadinga ukubuyekezwa. Ngokwesibonelo:

// Old style with esModuleInterop: false
import * as express from "express";

// New style with modern interop always on
import express from "express";

The alwaysStrict ifulegi alikwazi ukusethwa ku- false asisekhoI-TypeScript manje isithatha ama-semantics emodi eqinile ye-JavaScript kuwo wonke amabhodi, okuhlanganisa nokuthi amagama agodliwe kanjani kanye this ziphathe kahle. Uma unekhodi endala ngempela esebenzisa amagama agodliwe afana nalawa await or static njengezihlonzi, kuzodingeka uziqambe kabusha.

Kuhoxisiwe: outFile, isikhala segama lendabuko module igama elingukhiye, kanye nokungenisa asserts

The --outFile inketho isusiwe ku-6.0Ukuhlanganisa okokufaka okuningi kube yi-JS bundle eyodwa kuwumsebenzi ophathwa kangcono yi-Webpack, Rollup, esbuild, Vite, Parcel, noma amathuluzi afanayo. I-TypeScript iphinda kabili ekuhlolweni kohlobo kanye nesimemezelo sokukhipha esikhundleni sokuzama ukuba yi-bundler.

Ukusetshenziswa kwefa kwe module ukumemezela izikhala zamagama manje kuyiphutha elinzimaI-TypeScript yasekuqaleni ivunyelwe:

module Foo {
  export const bar = 10;
}

Ukusetshenziswa kwe-syntax yesimanje, esekelwayo namespace:

namespace Foo {
  export const bar = 10;
}

Lolu shintsho luyadingeka ukuze kugwenywe ukungqubuzana ne-ECMAScript engaba khona yesikhathi esizayo module izivimbela. Izimemezelo zemojuli ye-ambient ezifana declare module "some-module" { ... } hlala usekelwa ngokugcwele.

Ngenisa iziqinisekiso usebenzisa asserts nazo azivunyelwe, ngoba isiphakamiso esiyisisekelo sashintsha saba yizimfanelo zokungenisa kusetshenziswa with. Ikhodi efana nale:

import blob from "./data.json" asserts { type: "json" };

Kufanele kuthuthelwe efomini elisha:

import blob from "./data.json" with { type: "json" };

Kuhoxisiwe: no-default-lib izinkomba kanye nohlu lwamafayela omugqa womyalo nge-tsconfig

The /// <reference no-default-lib="true" /> isiqondiso asisasekelwa. Kwakuvame ukungaqondwa kahle. Uma udinga ukukhipha i-lib ezenzakalelayo, sebenzisa --noLib or --libReplacement kunalokho, okuveza ngokucacile inhloso ezingeni lokucushwa.

Esinye isici esidala sokudideka ukuthi kanjani tsc iphatha izimpikiswano zefayela ezicacile lapho tsconfig.json ikhona. Ngaphambilini, bekusebenza tsc foo.ts kufolda enjalo bekungayinaki buthule ifayela lokucushwa. Ku-6.0, leso simo siveza iphutha elicacile:

error TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.

Uma ufuna ngempela ukudlula ukucushwa bese uhlanganisa ifayela elilodwa elinokuzenzakalelayo, manje usungasebenzisa tsc --ignoreConfig foo.ts ukuze kucace leyo nhloso.

Ukulungiselela i-TypeScript 7.0

I-TypeScript 6.0 iphelele ngezici futhi ikakhulukazi ikwimodi yokuzinzaKusukela lapha kuya ekutholakaleni okuvamile, ithimba lilindele ukulungiswa kwamaphutha abucayi kuphela. Ukwakhiwa kwasebusuku kushicilelwa njalo, futhi ithimba liphinde lithumele izinguqulo zasebusuku ze-TypeScript 7.0 entsha (esekelwe ku-Go) kanye nesandiso se-VS Code esizinikele sokuzama injini entsha.

Umhlahlandlela uqinile ngamabomu: kulindeleke ukuthi i-7.0 ilandele i-6.0 maduze nje, ngakho-ke i-feedback loop ezinkingeni zobuhlungu nokufuduka kokuthuthukiswa izoba mfushane. Uma ubona izixwayiso zokuhoxiswa ku-6.0, isincomo esinamandla ukuthi uzixazulule manje esikhundleni sokulinda kuze kube yilapho i-7.0 iphoqa inkinga.

Indlela yokusebenza esebenzayo yamaqembu amaningi ibukeka kanje: thuthukela ku-TypeScript 6.0 RC, lungisa eyakho types futhi rootDir, ukuhoxiswa kwekheli (noma ukubavala okwesikhashana ngemuva "ignoreDeprecations": "6.0" ngenkathi uphinda-phinda), bese usebenzisa --stableTypeOrdering uma udinga ukuqhathanisa imiphumela noma ukulungiselela amapayipi e-CI ukuze kuhlelwe ngendlela eqondile ye-7.0. Uma lokho sekukhona, ukugxuma ku-compiler esekelwe ku-Go kufanele kuzwakale njengokuthuthukiswa kokusebenza kunokuba kube ukubhala kabusha okuphulayo.

Uma sibheka konke, i-TypeScript 6.0 RC ayidingi kakhulu i-syntax ecwebezelayo kodwa imayelana nokubeka isiteji.: isivinini sendabuko ku-7.0, izilungiselelo ezihlanzekile, okuzenzakalelayo kwesimanje, kanye nama-API ajwayelekile njenge-Temporal kanye ne-ES2025 ezakhelwe ngaphakathi ezenza kube lula ukubhala ikhodi yansuku zonke. Uma uyisebenzisa manje, ulungisa ama-bits anomsindo, bese uthambekela kokuzenzakalelayo okusha, uzoba sendaweni engcono kakhulu lapho i-compiler yendabuko ifika.

izindaba zesofthiwe
I-athikili ehlobene:
Intuthuko Yamuva Yesofthiwe kanye Nezindlela Zobuchwepheshe Ezisafufusa
Okuthunyelwe okuhlobene: