Pavadinimo susidūrimas įvyksta, kai du ar daugiau kodo komponentų naudoja tą patį pavadinimą kintamajam, funkcijai ar klasei. Jie yra įprasti dideliuose projektuose, kuriuose daug žmonių dirba toje pačioje kodų bazėje. Dėl jų gali būti sunku nustatyti, kuris kodo komponentas yra atsakingas už klaidas.
Naudodami vardų sritis galite tvarkyti ir tvarkyti savo kodą taip, kad susijusių komponentų grupės būtų po bendru identifikatoriumi. Tai sumažins pavadinimų konfliktų riziką.
Vardų erdvės kūrimas
Galite sukurti vardų sritis „TypeScript“ naudodami vardų erdvė raktažodį. Sekite jį identifikatoriumi, kad pavadintumėte vardų erdvę ir bloką, apsuptą riestiniais skliaustais. Sintaksė yra panaši į tą, kurią naudojate sukurti klasę „JavaScript“..
Pavyzdžiui:
vardų erdvė Pavyzdys {}
Tada vardų erdvės bloke galite deklaruoti vardų erdvės narius – kintamuosius, funkcijas ir klases:
vardų erdvė Pavyzdys {
eksportuotifunkcijaFoo(): tuštuma{
konsolė.log("Tai funkcija pavyzdžio vardų srityje");
}eksportuotiklasė Baras {
nuosavybė: styga;konstruktorius(nuosavybė: styga) {
tai.savybė = nuosavybė;
}
}
eksportuotikonst baz = "Tai vardų erdvės kintamasis"
}
Aukščiau pateiktame pavyzdyje Foo, Baras, ir baz yra nariai Pavyzdys vardų erdvė. Pagal numatytuosius nustatymus galite pasiekti tik toje pačioje vardų erdvėje esančius vardų srities narius. Naudoti eksportuoti raktinį žodį, kad kiekvienas vardų erdvės narys būtų pasiekiamas už jos ribų.
Galite pasiekti visus viešai prieinamus vardų erdvės narius iškvietę vardų erdvės nario pavadinimą, naudodami tašką:
Pavyzdys.foo(); // Tai funkcija, esanti pavyzdžio vardų srityje
konst juosta = naujas Pavyzdys. Baras ("styga");
konsolė.log (bar.property); // eilutė
konsolė.log (Example.baz); // Tai vardų erdvės kintamasis
Įdėtos vardų erdvės
„TypeScript“ leidžia įdėti vardų erdves į kitas vardų sritis, kad sukurtumėte hierarchinę kodo struktūrą. Įdėjus vardų sritis, galima dar labiau sumažinti pavadinimų susidūrimų riziką, sugrupuojant susijusias vardų sritis pagal bendrą identifikatorių.
Pavyzdžiui:
vardų erdvė Pavyzdys {
eksportuotikonst nuosavybė_1 = "Foo";eksportuotivardų erdvė Baras {
eksportuotikonst printFoo = funkcija () {
konsolė.log (ypatybė_1);
};
}eksportuotivardų erdvė Baz {
eksportuotiklasė Foo {
nuosavybė: styga;
konstruktorius(nuosavybė: styga) {
tai.savybė = nuosavybė;
}
}
}
}
Aukščiau pateiktame kodo bloke pateikiamas įdėtos vardų erdvės pavyzdys. The Pavyzdys vardų erdvė yra aukščiausio lygio vardų erdvė, kurioje yra Baras vardų erdvė ir Baz vardų erdvė.
Įdėtosios vardų erdvės ypatybes galite pasiekti naudodami taško žymėjimą, kuris atitinka jūsų sukurtą hierarchinę struktūrą.
Pavyzdžiui:
konsolė.log (Example.property_1); // Foo
Pavyzdys. Bar.printFoo() // Foo
konst foo = naujas Pavyzdys. Baz. Foo ("pavyzdys")
Šis pavyzdinis kodas pasiekia kiekvieną vardų srities narį per pirminę vardų sritį. Pasiekus nuosavybę tiesiogiai, o ne per pirminę vardų erdvę, atsiras klaida:
Pavyzdys.printFoo()
// klaida TS2339: ypatybė „printFoo“ neegzistuoja tipui „typeof example“
Nors įdėtos vardų erdvės gali padėti tvarkyti kodą, giliai įdėtos vardų erdvės gali sukelti priešingą efektą. Dėl giliai įdėtos vardų erdvės kodą sunkiau skaityti ir prižiūrėti.
Vardų erdvės slapyvardžiai
Vardų erdvės slapyvardis yra sutrumpintas vardas, suteiktas vardų erdvės nariui, todėl jį lengviau nurodyti.
Galite sukurti vardų erdvės slapyvardį naudodami importuoti raktažodį, po kurio nurodomas vardas, kurį norite priskirti slapyvardžiui. Tada priskirkite importuoti raktinį žodį ir slapyvardžio pavadinimą vardų erdvės nariui.
Pavyzdžiui:
vardų erdvė automobilis {
eksportuotivardų erdvė Tesla {
eksportuotiklasė ModelX {
sukurti (): Styga {
grąžinti„Sukurtas X modelis“.
}
}
}eksportuotivardų erdvė Toyota {
eksportuotiklasė Camry {}
}eksportuotivardų erdvė Ford {
eksportuotiklasė Mustang {}
}
}// Pseudonimo kūrimas
importuoti tesla = automobilis. Tesla
konst modelisX = naujas tesla. ModelX()
modelX.create() // Sukurtas X modelis
Šis pavyzdys sukuria slapyvardį Automobilis. Tesla vardų erdvė. Šį slapyvardį galite naudoti norėdami pasiekti ypatybes Tesla vardų sritis, kaip ir ModelX klasė, lengviau.
Vardų erdvių naudojimas keliuose failuose
Norėdami naudoti vardų erdvę kitame faile, turite ją importuoti. Vardų erdvių importavimas skiriasi nuo kintamųjų, funkcijų, klasių ir kt. Priklausomai nuo jūsų projekto modulinė sistema, galite juos importuoti naudodami bet kurį reikalauti arba importuoti raktažodį.
Tačiau vardų sritis galite importuoti tik naudodami trigubo pasvirojo brūkšnio direktyvą, kuri yra vienos eilutės komentaras su XML žyma.
Pavyzdžiui:
// pagrindinis.ts
///
example.foo()
Šiame pavyzdyje a viduje naudojama trigubo pasvirojo brūkšnio direktyva pagrindinis.ts failą. Direktyvoje nurodoma indeksas.ts failą, kuriame yra Pavyzdys vardų erdvė. Neimportuojant vardų erdvė pasiekiama tik tame pačiame faile, kuris ją apibrėžia.
Nurodę indeksas.ts failą, galite pasiekti Pavyzdys vardų erdvę ir jos viešai prieinamus narius. Pavyzdžiui, galite paskambinti foo metodas ant Pavyzdys vardų erdvė.
Kai naudosite kelis failus, turėsite užtikrinti, kad „TypeScript“ sukompiliuotų ir įkeltų visą reikiamą kodą. Tai galite padaryti sujungdami išvestį iš „TypeScript“ kompiliatoriaus naudodami outFile variantas. Tada visi įvesties failai bus sukompiliuoti į vieną „JavaScript“ išvesties failą. Bendroji kompiliatoriaus paleidimo sintaksė yra tokia:
tsc --outFile
Pakeiskite su tikslinio „JavaScript“ failo pavadinimu. Pakeiskite su TypeScript failo, kuriame yra trigubo pasvirojo brūkšnio direktyva, pavadinimu.
Pavyzdžiui:
tsc --outFile index.js main.ts
Ši komanda sukompiliuos turinį pagrindinis.ts failą kartu su visais failais, nurodytais trigubo pasvirojo brūkšnio direktyvoje, į index.js failą.
Arba galite nurodyti kiekvieną failą atskirai:
tsc --outFile
Svarbu pažymėti, kad trigubo pasvirojo brūkšnio direktyva galioja tik tada, kai ji deklaruojama failo viršuje. Jei bandysite jį naudoti kur nors kitur, „TypeScript“ traktuos jį kaip įprastą vienos eilutės komentarą, neturintį jokios ypatingos reikšmės.
Ar turėtumėte naudoti vardų erdves ar modulius?
Nors vardų erdvės nėra pasenusios, dažnai rekomenduojama tvarkyti ir tvarkyti kodą naudojant ES6 modulius. Modulius lengviau prižiūrėti ir valdyti, o juos galite aprėpti keliuose failuose.
Be to, galite nurodyti ryšius tarp modulių, susijusių su importu ir eksportu failo lygiu. Vardų erdvės negali apibrėžti jų priklausomybių.
Galų gale pasirinkimas tarp vardų erdvių ir modulių priklausys nuo konkrečių jūsų projekto poreikių ir reikalavimų, nes abu siūlo vertingą būdą tvarkyti ir valdyti kodą naudojant „TypeScript“.