A TypeScript típusainak áttekintése

Befejeződött

A TypeScript fő előnye, hogy lehetővé teszi statikus típusok hozzáadását a JavaScript-kódhoz. A típusok statikus korlátozásokat helyeznek a program entitásaira, például a függvényekre, változókra és tulajdonságokra, hogy a fordítók és a fejlesztői eszközök jobb ellenőrzést és segítséget nyújtsanak a fejlesztés során.

A TypeScript statikus fordítási idő típusú rendszere szorosan modellozza a JavaScript dinamikus futásidejű rendszerét. A statikus fordítási idő típusú rendszer lehetővé teszi, hogy pontosan kifejezze azokat a típuskapcsolatokat, amelyek várhatóan létezni fognak a programok futtatásakor. Ezt követően a TypeScript fordító előre ellenőrizze ezeket a feltételezéseket. A TypeScript-típuselemzés teljes egészében fordítási időben történik, és nem ad hozzá futási időt a program végrehajtásához.

A statikus típusok lehetővé teszik a kód szándékának jobb dokumentálását is, ami segít Önnek és más fejlesztőknek megérteni.

Let és const változók deklarálása

Az ECMAScript 2015 hozzáadta a let változó deklarációhoz szükséges kulcsszavakat a const JavaScriptben, ami kiküszöbölte a kulcsszóval kapcsolatos problémák egy részét a var korábbi verziókban. Ez a módosítás lehetővé teszi a blokkszintű hatókörrel rendelkező változók deklarálását, és megakadályozza, hogy ugyanazt a változót többször deklarálja.

A TypeScript a változó deklarációkhoz a kulcsszavak és const a let kulcsszavak használatát ösztönzi.

Megjegyzés:

Emlékeztetőül, a különbség köztük az, hogy let a deklarációk inicializálás nélkül is elvégezhetők, míg const a deklarációk mindig egy értékkel vannak inicializálva. És const a deklarációk hozzárendelése után soha nem rendelhetők hozzá újra.

Gyakorlat – Típuskövetkeztetés a TypeScriptben

A típusokat explicit típusú széljegyzetekkel vagy implicit típusú következtetésekkel társíthatja a változókhoz.

Az ajánlott típusjegyzetek nem kötelezőek a TypeScriptben. Explicit típus deklarálásához használja a szintaxist variableName: type. Az utasítás let myVariable: number számtípusként deklarálja a változót inicializálás nélkül. Másik lehetőségként inicializálhatja a változót a következővel let myVariable: number = 10: .

A változó típusának típuskövetkeztetéssel történő kifejezéséhez használja ugyanazt a formátumot, amelyet a JavaScriptben használ. Például arra következtet, let myVariable = 10 hogy a változó típusa number azért van, mert inicializálva van az értékkel 10.

Nyissuk meg a játszóteret , és nézzük meg, hogyan működik ez.

  1. Adja meg a következő változódeklarációkat:

    let x: number;   //* Explicitly declares x as a number type
    let y = 1;       //* Implicitly declares y as a number type
    let z;           //* Declares z without initializing it
    
  2. A TypeScript mostantól típusként number kezelix. A TypeScript arra is következtet y , hogy típusnak kell lennie number , mert ez az inicializáláshoz használt érték típusa. De mi történik, ha egy másik értéktípust próbál hozzárendelni hozzá? És mi történik a z változóval?

  3. Nyissa meg a Hibák lapot a Játszótéren, hogy figyelhesse az esetleges hibákat.

  4. Írja be x = 1. Ennek a deklarációnak a várt módon kell működnie, hiba nélkül.

  5. Írja be x = "one". A vártnak megfelelően ez a deklaráció azt jelzi, hogy a "sztring" típusú hiba nem rendelhető hozzá a "szám" típushoz, mert a statikus típusellenőrzés nem teszi lehetővé a változóhoz való hozzárendelést string .

  6. Írja be y = "one". Ugyanez a hiba jelentkezik, mert a TypeScript arra következtet, hogy az y típus number.

  7. Adja meg a változó nevét y , majd egy pontot, és még egy dolgot fog látni. Annak ellenére, hogy kifejezetten nem adott meg típust a változóhoz y, az Intellisense olyan metódusokat biztosít, amelyek csak egy number típusra vonatkoznak.

  8. Adja meg z = 1 és z = "one". A TypeScript mindkettőt elfogadta, de miért? Ezek a deklarációk ugyanúgy működnek, mint a JavaScriptben, mivel a változó z mostantól bármilyen hozzárendelt értéket elfogad. A TypeScript arra a következtet, hogy a z típus típusa any azért van, mert nem rendelt hozzá típust, és nem inicializálta azt a deklarálásakor. A típusról any később többet is megtudhat.

Habár a TypeScriptben implicit módon is következtethet típuslekövetkeztetéssel, érdemes? A típuskövetkezmények révén a statikus típusellenőrzés és az Intellisense előnyeit élvezheti, és lehetővé teszi, hogy fokozatosan áttérjen a projektek explicit típusdeklarációira. A explicit típusdeklarációk azonban lehetővé teszik a kód szándékának jobb dokumentálását és a szándékosabb előrehaladt utat.

Típusok és altípusok a TypeScriptben

Mielőtt a típusokat változó deklarációhoz használjuk, nézzük meg a TypeScript típusait és altípusait.

Bármilyen típus

A TypeScriptben minden típus egy típusnak nevezett felső típus altípusa any . A any típus az egyetlen típus, amely bármilyen JavaScript-értéket jelölhet megkötések nélkül. Minden más típus primitív típusként, objektumtípusként vagy típusparaméterként van kategorizálva. Ezek a típusok különböző statikus korlátozásokat vezetnek be az értékükön.

Type hierarchy with any as the top type, and primitive types, object types, and type parameters as subtypes. Primitive types null and undefined are subtypes of all other types.

Primitív típusok

A primitív típusok a boolean, number, string, void, nullés undefined a felhasználó által definiált számbavétel vagy enum típusok. A void típus kizárólag egy érték hiányának jelzésére szolgál, például egy visszatérési értékkel nem rendelkező függvényben. A null típusok az undefined összes többi típus altípusai. Nem lehet explicit módon hivatkozni a típusokra és undefined a típusokranull. Csak ezeknek a típusoknak az értékeire lehet hivatkozni a literálok és undefined a null literálok használatával.

Objektumtípusok és típusparaméterek

Az objektumtípusok mind osztály-, felület-, tömb- és literáltípusok (minden, ami nem primitív típus).)

Az osztály- és felülettípusokat osztály- és interfészdeklarációkon keresztül vezetik be, és a deklarációkban szereplő név hivatkozik rájuk. Az osztály- és felülettípusok lehetnek olyan általános típusok, amelyek egy vagy több típusparamétert is tartalmazhatnak. Ezekről az objektumtípusokról a későbbi modulokban olvashat bővebben.