TypeScript Oktatóanyag: Mi az interfész, az enum és a tömb?

⚡ Okos összefoglaló

TypeScript egy erősen tipizált szuperhalmaza a következőnek: JavaEgyszerűen lefordítható szkript JavaSzkripteket ír, és osztályokat, interfészeket, enumerációkat, modulokat és névtereket ad hozzá. Ez a cikk a telepítést, változókat, típusokat, tömböket, osztályokat, hozzáférés-módosítókat, interfészeket, függvényeket, enumerációkat, modulokat és környezeti deklarációkat tárgyalja.

  • 🧬 Nyelvi rokonság: Minden érvényes JavaA szkriptprogram érvényes TypeScript, és a fordító sima JavaSzkript bármely célverzióhoz.
  • 🔒 Statikus típusping: Egy változó megőrzi a deklarációkor megadott típust, így az eltérést fordítási időben, és nem futási időben jelzi.
  • 🧱 Objektumorientáció: Az osztályok, az öröklődés, valamint a nyilvános, privát és védett módosítók ismerős struktúrát hoznak a böngészőkódba.
  • 📐 Interfészek: Egy interfész definiál egy hátrányttracTulajdonságok és metódusok összessége, amelyeknek egy változónak, függvénynek vagy osztálynak meg kell felelnie.
  • 🔢 Felsorolások: A megnevezett konstans halmazok önmeghívott függvényekké fordulnak le, mivel JavaA szkriptnek nincs natív enum típusa.
  • 📦 modulok: Az export és import deklarációk lokálisan, egy fájlban tárolódnak, így elkerülhetők a globális névütközések.
  • 🔌 Környezeti nyilatkozatok: A .d.ts fájl egy harmadik felet ír le JavaSzkriptkönyvtár, így a típusellenőrzés átírás nélkül is elvégezhető.

TypeScript Kezdőknek

Mi a TypeScript?

TypeScript egy szuperkészlete JavaForgatókönyv. TypeScript egy objektumorientált programozási nyelv, amely osztályokat, interfészeket és egyebeket támogat. Ez egy nyílt forráskódú nyelv, amelyet a ... fejlesztett ki. Microsoft amely statikusan lefordítja a kódot arra JavaSzkript. Könnyen futtatható böngészőben vagy Nodejs-ben.

Az ECMAScript összes legújabb funkciója támogatott TypeScript, és ezen felül TypeScript saját objektumorientált funkciókkal rendelkezik, mint például interfészek, környezeti deklarációk és osztályöröklés, amelyek segítik a fejlesztéstping egy nagyméretű alkalmazás, amelyet egyébként nehéz lenne beépíteni JavaForgatókönyv.

A kapcsolat egyirányú. Minden érvényes JavaA szkriptfájl már érvényes TypeScript, de fordítva nem igaz, mivel a típusannotációk csak a következőben léteznek: TypeScript és a fordítás során törlődnek.

Miért érdemes TypeScript?

Íme a használat fontos előnyei TypeScript:

  • Nagy és összetett projektek JavaA szkriptet nehéz kódolni és karbantartani.
  • TypeScript sokat segít a kód rendszerezésében, és a legtöbb hibát a fordítás során, nem pedig futásidőben távolítja el.
  • TypeScript támogatja a JS könyvtárakat és az API dokumentációt.
  • Ez egy opcionálisan típusos szkriptnyelv, így a típusok fokozatosan adaptálhatók.
  • TypeScript a kód egyszerűvé alakítható JavaSzkriptkód bármely böngészőcélhoz.
  • Jobb kódszerkezetet és objektumorientált programozási technikákat biztosít.
  • Jobb fejlesztési idő alatt használható eszköztámogatást biztosít, beleértve az automatikus kiegészítést és a biztonságos refaktorálást.
  • Kiterjesztheti a nyelvet a szabványon túl, olyan jellemzőkkel, mint a dekoratőrök.

A legnagyobb gyakorlati előny a szerkesztő támogatása. Mivel a fordító minden érték alakját ismeri, a szerkesztő átnevezhet egy tulajdonságot egy teljes projektben, és jelentheti az összes olyan helyet, amely már nem egyezik.

TypeScript Történelem

Nézzük meg a történelem fontosabb mérföldköveit TypeScript:

  • Két év belső fejlesztés után at Microsoft, TypeScript A 0.9-es verzió 2013-ban jelent meg.
  • TypeScript Az 1.0-s verzió, amely további támogatást nyújt a generikus gyógyszerekhez, a 2014-es Build kiadásban jelent meg.
  • 2014 júliusában egy új TypeScript Megérkezett egy fordítóprogram, amely ötször gyorsabb volt az előző verziónál.
  • 2015 júliusában támogatást adtak az ES6 modulokhoz, a namespace kulcsszóhoz, a for…of-hoz és a decorators-okhoz.
  • 2016 novemberében hozzáadták a leképezett típusokat, a kulcs- és keresési típusokat, valamint az objektumok pihentetését és szétterítését.
  • 2018. március 27-én feltételes típusok és továbbfejlesztett metszettípusú keyof került hozzáadásra.
  • TypeScript A 2023 márciusában kiadott 5.0 modernizálta a dekoratőröket és csökkentette a csomag méretét.
  • TypeScript A 6.0-s verzió 2026 márciusában érkezett meg, mint a ...-ra épülő utolsó kiadás. JavaSzkript kódbázis.
  • TypeScript A 7.0 verzióban a fordítóprogram egy natív Go implementációra vált, amely Microsoft nagyjából tízszer gyorsabbnak jelenti, mint a 6.0.

Ki használ TypeScript?

TypeScript már nem réspiaci választás. Számos legszélesebb körben használt front-end és back-end eszköz alapját képezi, és az alábbi lista azt mutatja, hogy egy kezdő hol találkozhat vele a legnagyobb valószínűséggel.

  • Szögletes: Az Angular keretrendszer nyelve: TypeScript, és várhatóan alkalmazáskódot is fognak benne írni.
  • React és Vue projektek: Mindkét ökoszisztéma hivatalos hajó TypeScript sablonok, és a legtöbb modern indítóprogram alapértelmezés szerint engedélyezi.
  • Node.js háttérrendszerek: A szerver keretrendszerek, mint például a NestJS, a következők köré épülnek: TypeScript osztályok és dekoratőrök.
  • Szerkesztői eszközök: Visual Studio Code önmagában is egy nagy TypeScript kódbázis, ezért olyan teljes a nyelvi támogatása.
  • Nagyvállalati kezelőfelületek: A sok közreműködővel dolgozó csapatok alkalmazzák, hogy a telepítés előtt kiszűrjék az integrációs hibákat.

Hogyan kell letölteni és telepíteni TypeScript

Íme a letöltési és telepítési folyamat lépésről lépésre TypeScript:

1. lépés) Töltse le és telepítse a Nodejs-t

Látogass el a Nodejs hivatalos oldalára, https://nodejs.org/en/download/, és töltse le és telepítse az operációs rendszeréhez tartozó Nodejs programot. Részletes utasításokat a következő útmutatóban talál: Hogyan töltsd le és telepítsd a Node.js-t?.

2. lépés) Ellenőrizze a Nodejs és az npm verziót

A Nodejs és az npm telepítettségének ellenőrzéséhez ellenőrizze a verziót a parancssorban.

D:\typeproject>node --version
v22.14.0

D:\typeproject>npm --version
10.9.2

Bármelyik jelenlegi Node LTS kiadás működik. TypeScript önmagában csak egy támogatott Node verziót igényel a fordító futtatásához.

Step 3) TypeScript Telepítés

Hozd létre a typeproject\ projektkönyvtárat, és futtasd az npm init parancsot az alábbi parancs szerint:

npm init

4. lépés) Indítsa el a telepítést

Ez létrehozza a package.json fájlt, amely a projektünk függőségeit fogja tárolni.

Ha kész, telepítse TypeScript az alábbiak szerint:

npm -g install typescript

A fenti parancs gondoskodik a telepítésről TypeScript. A „-g” hozzáadása az npm installhoz települ TypeScript globálisan. A -g használatának előnye, hogy a következőt használhatod: TypeScript tsc parancsot bármely könyvtárból, mivel globálisan telepítve van. Abban az esetben, ha nem szeretné telepíteni TypeScript globálisan, használd az alábbi parancsot:

npm install --save-dev typescript

Hozz létre egy src\ mappát a projektkönyvtáradban, és az src\ mappán belül hozd létre a TypeScript a test.t fájlt, és írja be a kódját.

Példa: test.ts

function add(x:number, y:number) {
	return x+y;
}

let sum = add(5,10);
console.log(sum);

Összeállít TypeScript kódot Javascript

A fenti kód lefordításához használd a következő parancsot.

If TypeScript globálisan telepítve van, használja az alábbi parancsot:

tsc test.ts

If TypeScript helyben van telepítve a projektedben, akkor a következő elérési utat kell használnod: TypeScript a node_modules-ból, ahogy az látható, vagy futtassa az npx-en keresztül:

node_modules\typescript\bin\tsc test.ts

OR

npx tsc test.ts

A fenti parancs létrehoz egy test.js fájlt, amelybe a kód le lesz fordítva. JavaForgatókönyv.

Példa: test.js

function add(x, y) {
    return x + y;
}
var sum = add(5, 10);
console.log(sum);

Végrehajt Javascript Nodejs használatával

Most a test.js-t fogjuk végrehajtani Nodejs-ben az alábbiak szerint:

D:\typeproject\src>node test.js
15

A console.log függvénynek átadott érték jelenik meg a test.js futtatásakor.

Végrehajt JavaSzkript a böngészőben

Példa:

<html>
<head></head>
<body>
<script type="text/javascript" src="test.js"></script>
</body>
</html>

Végrehajt Javascript Nodejs használatával

Összeállít TypeScript kódot Javascript EcmaScript verzió használatával

TypeScript támogatja az összes kiadott ECMAScript funkciót, és a fejlesztők használhatják azokat kódolás közben. De nem minden új funkció támogatott régebbi böngészőkön, ezért előfordulhat, hogy az ECMAScript egy régebbi verziójára kell fordítani. TypeScript olyan fordítási lehetőségeket kínál, amelyek pontosan ezt teszik.

Példa: test.ts

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

A választott ES verzióra való fordításhoz a következőképpen használhatja a target vagy a t opciót a parancsban:

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

Alapértelmezés szerint a cél az ES3 a klasszikus fordítóhoz. Ha meg szeretnéd változtatni, használhatod a fenti parancsot.

Jelenleg az ES6-ot fogjuk használni célként:

tsc --target ES6  test.ts

test.ts test.js

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

A kód változatlan marad, mivel a használt nyílfüggvény egy ES6 funkció, és változatlan marad az ES6-ra fordításkor.

Alapértelmezés szerint a cél az ES3, tehát cél nélkül a test.js fájlt a következőképpen kapjuk:

var addnumbers = function (a, b) {
    return a + b;
};
addnumbers(10, 20);

Tehát itt a vastag nyíl egy normál anonim függvénnyé változik.

💡 Tipp: A parancssorban minden egyes opció megadása helyett futtassa a következőt: tsc --init egy tsconfig.json fájl létrehozásához. A fordító ezután beolvassa a fájlból a target, outDir és strict beállításokat a teljes projektre vonatkozóan.

Változók be TypeScript

Változók értékek tárolására szolgálnak, és az érték lehet karakterlánc, szám, logikai érték vagy kifejezés. Amikor a változókról van szó TypeScript, hasonlítanak a JavaForgatókönyvTanuljuk meg tehát, hogyan deklaráljunk és rendeljünk értéket változókhoz a TypeScript.

A változók nem használhatók kódban definiálás nélkül. Változó deklarálásához használhatja a következőt:

volt kulcsszó,

hadd kulcsszó

const kulcsszó

Munka változókkal TypeScript hasonló JavaSzkript, és a felhasználók, akik ismerik JavaA szkript nagyon könnyen fogja találni. A modern kódban, hadd és a const előnyben részesülnek a volt, mivel a blokk hatókörük egy egész hibaosztályt megakadályoz.

Változók deklarálása a var

Syntax:

var firstname = "Roy";

Vessünk egy pillantást néhányra TypeScript példák a var kulcsszó működésének megértéséhez, valamint a kulcsszóval deklarált változók hatókörének megértéséhez volt kulcsszó.

Példa 1:

var k = 1; // variable k will have a global scope

function test() {
    var c = 1; // variable c is local and accessible only inside function test
    return k++;
}

test(); // output as 1
test(); // output as 2
alert(c); // will throw error, Uncaught ReferenceError: c is not defined

Példa 2:

var t = 0; // variable t is declared in global scope
function test() {
    var t = 10; // t is redeclared inside the function, so changes stay local
    return t;
}
test(); // will return 10
console.log(t); // will console 0

Példa 3:

var i = 0;
function test() {
    if (i > 0) {
      var t = 1;
    }
    return t;
}

test(); // returns undefined. The if block did not run, yet t is still declared
        // because var declarations are hoisted to the whole function.
i++;    // value of i is incremented
test(); // since i > 0 the if block runs and the value returned is 1

Változók deklarálása let segítségével

Az TypeScript A let szintaxisa a következő:

Syntax:

let name = "Roy";

A működése a hadd változó majdnem ugyanaz, mint volt, de egy fontos különbséggel, amit az alábbi példa is szemléltet.

Példa:

let i = 1;
function test() {
    if (i > 0) {
	  let t = 1;
    }
    return t;
}

test(); // throws an error: Cannot find name 't'

A fenti TypeScript példa hibát dob, de ugyanaz a kód működött volna a következővel is: volt kulcsszó. A változók deklarálása a következővel történik: hadd csak abban a blokkban érhetők el, amelyben deklarálták őket. Ebben a példában a t csak az if blokkon belül létezik, nem az egész függvényben.

Ugyanez vonatkozik bármely függvényen belül, for cikluson, while cikluson vagy switch blokkon belül. Egy let változó csak az adott blokkon belül érhető el, és a blokkon kívüli hivatkozás hibát dob. Ez a fő különbség a var és a let között.

Változók deklarálása a const segítségével

A const konstans változókat jelent. Hasonlóak a let változókhoz, azzal a különbséggel, hogy ha egy érték egyszer hozzárendelődött, az már nem módosítható. Ezért a const deklarációt ugyanazon a sorban kell inicializálni.

Syntax:

const name = "Roy";

Példa:

const age = "25";
age = "30"; // error: Cannot assign to 'age' because it is a constant

const total; // error: 'const' declarations must be initialized

Tehát használd a const függvényt, amikor tudod, hogy a hozzárendelt érték nem kerül áthelyezésre. Fontos megjegyezni, hogy a const a kötés áthelyezését akadályozza meg, nem pedig a mutatott objektum módosítását.

Beír TypeScript

TypeScript erősen tipizált nyelv, míg JavaA szkript nem az. Egy karakterláncként definiált változó probléma nélkül számmá alakítható a következőben: JavaSzkript. Ugyanez nem megengedett a TypeScript. -ban TypeScript, a változó típusa a legelején definiálva van, és a végrehajtás során ezt a típust meg kell tartania. Bármilyen változás fordítási idejű hibához vezet a fordítás során. JavaForgatókönyv.

Az alábbiak az alapvető típusok:

típus elfogadja Példanyilatkozat
szám Egész számok, úszó számok és törtek legyen a: szám = 10;
húr Csak szöveges értékek legyen s: karakterlánc = „szia”;
logikai csak igaz vagy hamis legyen b: boolean = igaz;
bármilyen Bármely érték, ellenőrzés nélkül legyen x: tetszőleges = 123;
semmisnek Visszatérési érték hiánya f() függvény: void {}

Szám

Csak egész számokat, lebegőpontos számokat, törteket és hasonló numerikus értékeket fogad el.

Syntax:

let a :number = 10;
let marks :number = 150;
let price :number = 10.2;

Íme néhány fontos módszer, amelyek számtípusokon használhatók:

toFixed () – karakterlánccá alakítja a számot, és megőrzi a metódusnak adott tizedesjegyeket.

toString () – ez a metódus karakterlánccá alakítja a számot.

értéke () – ez a módszer visszaadja a szám primitív értékét.

Precision() – ezzel a módszerrel a szám meghatározott hosszúságúra formázható.

Példa: minden számmetódussal

let _num :number = 10.345;
_num.toFixed(2);      // "10.35"
_num.valueOf();      // 10.345
_num.toString();     // "10.345"
_num.toPrecision(2); // "10"

Húr

Karakterlánc: csak karakterlánc értékek.

Syntax:

let str :string = "hello world";

Íme néhány fontos metódus, amelyek karakterlánc típusokon használhatók:

  • osztott() – ez a metódus a karakterláncot tömbre osztja.
  • charAt() – ez a metódus a megadott indexű karaktert adja vissza.
  • indexe() – ez a metódus a neki adott érték első előfordulásának pozícióját adja meg.
  • cserélni() – ez a metódus 2 karakterláncot fogad el. Megkeresi a karakterlánc első értékét, és ha van ilyen, akkor a másodikra ​​cseréli, így egy új karakterláncot ad vissza.
  • állapot() – ez a metódus eltávolítja a szóközöket a karakterlánc mindkét oldaláról.
  • alstr() – ez a metódus a karakterlánc egy részét adja vissza, a kezdőpozíciótól és a megadott hossztól függően.
  • szubsztring() – ez a metódus a karakterlánc egy részét adja vissza, a kezdő és a végpozíciótól függően. A végpozícióban lévő karaktert kizárja.
  • toUpperCase() – nagybetűssé alakítja a karakterláncot.
  • to LowCase() – a karakterláncot kisbetűssé alakítja.

Példa:

let _str:string = "Typescript";

_str.charAt(1);                // y
_str.split("");                // ["T","y","p","e","s","c","r","i","p","t"]
_str.indexOf("s");             // 4, gives -1 if the value does not exist
_str.replace("Type", "Coffee"); // "Coffeescript"
_str.trim();                    // "Typescript"
_str.substr(4, _str.length);   // "script"
_str.substring(4, 10);         // "script"
_str.toUpperCase();             // "TYPESCRIPT"
_str.toLowerCase();             // "typescript"

logikai

Egy logikai érték csak az igaz és hamis logikai értékeket fogadja el. A sima értékkel ellentétben JavaSzkriptben a 0 és az 1 számok nem elfogadottak, mivel szám típusúak.

Syntax:

let status :boolean = true;
let isDone :boolean = false;

let bflag :boolean = 1;
// error: Type 'number' is not assignable to type 'boolean'

Bármilyen

Syntax:

let a :any = 123
a = "hello world"; // changing type will not give any error.

A segítségével deklarált változók bármilyen A típus tartalmazhat karakterláncot, számot, tömböt, logikai értéket vagy void értéket. TypeScript nem dob fordítási idejű hibát, ami hasonló a változókhoz a JavaSzkript. Az „any” típust csak akkor használd, ha nem vagy biztos benne, hogy milyen típusú érték lesz társítva az adott változóhoz, mert ez kikapcsolja az adott érték minden ellenőrzését.

Üres

A void típust többnyire olyan függvények visszatérési típusaként használják, amelyek nem adnak vissza semmit.

Syntax:

function testfunc():void{
 //code here
}

TypeScript Sor

An Sor in TypeScript egy olyan adattípus, amelyben több értéket is tárolhatsz. Tanuljuk meg, hogyan deklarálhatunk és rendelhetünk értékeket tömbműveletekhez a TypeScript.

Óta TypeScript egy erősen tipizált nyelv, meg kell adni a tömbben lévő értékek adattípusát. Ellenkező esetben a tömb típusa „any”.

Tömb deklarálása és inicializálása

Syntax:

let nameofthearray : Array<typehere>

Példa

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; // array with all string values

let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; // array with all numbers

let month_year: Array<string | number> = ["Jan", 2015, "Feb", 2016]; // mixed

let alltypes: Array<any> = [true, false, "Harry", 2000, { "a": "50", "b": "20" }]; // any type

Különböző módok az elemek elérésére egy tömbből

Egy tömb elemeinek kinyeréséhez az értékek a 0 indextől kezdődnek, és a tömb hosszának egytől való levonásáig tartanak.

let years: Array<number> = [2016, 2017, 2018, 2019];
years[0]; // output will be 2016
years[1]; // output will be 2017
years[2]; // output will be 2018
years[3]; // output will be 2019

Egy tömb elemeit egy TypeScript mert hurok, az alábbiak szerint.

<p></p> TypeScript hurokhoz

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i = 0; i < years.length; i++) {
     console.log(years[i]);
}

output:

2016
2017
2018
2019

⚠️ Figyelmeztetés: A ciklus feltételének a következőnek kell lennie: i < years.lengthÍrás i <= years.length lefuttat egy plusz iterációt és kinyomtatja undefined, mivel az utolsó érvényes index mindig egy mínusz hosszú.

For-in hurok használata

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i in years) {
     console.log(years[i]);
}

output:

2016
2017
2018
2019

For-of hurok használata

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i of years) {
     console.log(i);
}

output:

2016
2017
2018
2019

forEach ciklus használata

let years: Array<number> = [2016, 2017, 2018, 2019];
years.forEach(function(yrs, i) {
  console.log(yrs);
});

output:

2016
2017
2018
2019

TypeScript Tömb módszerek

Az TypeScript A tömb objektum számos tulajdonsággal és metódussal rendelkezik, amelyek segítik a fejlesztőket a tömbök egyszerű és hatékony kezelésében. Egy tulajdonság értékét az arrayname.property megadásával, egy metódus kimenetét pedig az arrayname.method() megadásával kaphatod meg.

Tag Cél Visszatér
hossz A tömb elemeinek száma szám
fordított () Reversea tételek sorrendje a helyén Ugyanaz a tömb
rendezés () Helyükre rendezi az elemeket Ugyanaz a tömb
pop () Eltávolítja az utolsó elemet Az eltávolított elem
váltás () Eltávolítja az első elemet Az eltávolított elem
nyom () Értéket ad hozzá utolsó elemként Az új hossz
concat () Két tömböt egyesít egybe Egy új tömb

Példa a hossz tulajdonságra

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];

console.log(months.length);  // 12

Példa fordított módszerre

console.log(months.reverse());
// ["Dec","Nov","Oct","Sept","Aug","July","June","May","April","March","Feb","Jan"]

Példa a rendezési módszerre

console.log(months.sort());
// ["April","Aug","Dec","Feb","Jan","July","June","March","May","Nov","Oct","Sept"]

Példa a pop módszerre

console.log(months.pop()); // Dec

Példa a shift módszerre

console.log(months.shift()); // Jan

Példa push módszerre

let years: Array<number> = [2015, 2016, 2017, 2018, 2019];
console.log(years.push(2020)); // 6, the new length
years.forEach(function(yrs, i) {
  console.log(yrs); // 2015, 2016, 2017, 2018, 2019, 2020
});

Példa a concat módszerre

let array1: Array<number> = [10, 20, 30];
let array2: Array<number> = [100, 200, 300];
console.log(array1.concat(array2)); // [10, 20, 30, 100, 200, 300]

Osztály TypeScript

TypeScript egy szuperkészlete JavaSzkript, tehát bármi lehetséges benne JavaSzkript is lehetséges benne TypeScriptAz osztály egy ES6-tól kezdődően hozzáadott funkció. Korábban a JavaA szkriptszerű, osztályszerű funkcionalitást egy függvény prototípus metódusokkal való felhasználásával érték el a kód újrafelhasználásához. Az osztályok használatával a kódod közelíthet olyan nyelvekhez, mint a Java, C# és Python, ahol a kód könnyen újrafelhasználható.

Osztály meghatározása TypeScript

Itt található az osztály alapvető szintaxisa TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class
}

Példa: Egy működő példa az osztályon

class Students {
    age : number;
    name : string;
    roll_no : number;

    constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

    getRollNo(): number {
        return this.roll_no;
    }

    getName() : string {
        return this.name;
    }

    getAge() : number {
        return this.age;
    }
}

A fenti példában van egy Students nevű osztályod. A tulajdonságok a következők: age, name és roll_no.

Konstruktor a TypeScript Osztály

A fent definiált Students osztály konstruktora az alábbi:

constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

A konstruktor metódus paraméterei a kor, név és roll_no. A konstruktor gondoskodik a tulajdonságok inicializálásáról, amikor az osztály példányosodik. A tulajdonságokhoz a következő segítségével lehet hozzáférni: ezt kulcsszó, például a this.age a kor eléréséhez és a this.roll_no a roll_no eléréséhez. Használhatsz egy alapértelmezett konstruktort is, ahogy az alább látható:

constructor () {}

Módszerek belül a TypeScript Osztály

A Students osztályban vannak definiálva metódusok, például a getRollNo(), getName() és getAge(), amelyek a roll_no, name és age tulajdonságok értékét adják vissza.

getRollNo(): number {
        return this.roll_no;
}

getName() : string {
	return this.name;
}

getAge() : number {
	return this.age;
}

Osztálypéldány létrehozása a következőben: TypeScript

In TypeScriptEgy osztály példányának létrehozásához a new operátort kell használnunk. Amikor a new operátorral hozunk létre egy példányt, kapunk egy objektumot, amely hozzáférhet az osztály tulajdonságaihoz és metódusaihoz, az alábbiak szerint:

let student_details = new Students(15, "Harry John", 33);
student_details.getAge();  // 15
student_details.getName(); // Harry John

Összeállítása TypeScript Osztály a JavaForgatókönyv

A tsc parancsot az alábbiak szerint használhatod a fordításhoz JavaForgatókönyv.

Command: tsc  Students.ts

A kimenet a JavaA fordításkor használt szkriptkód az alábbiak szerint alakul:

var Students = /** @class */ (function () {
    function Students(age, name, roll_no) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }
    Students.prototype.getRollNo = function () {
        return this.roll_no;
    };
    Students.prototype.getName = function () {
        return this.name;
    };
    Students.prototype.getAge = function () {
        return this.age;
    };
    return Students;
}());

In JavaSzkript, az osztály egy önmeghívott függvénnyé alakul.

Osztály öröklődés

Az osztályok örökölhetők a nyúlik kulcsszó be TypeScript.

Osztály öröklődés szintaxisa:

class A {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

class B extends A {
 //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

B osztály megoszthatja majd A osztály módszerek és tulajdonságok.

Íme egy működő példa egy öröklődést használó osztályra:

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24);
_std1.getAge();      // output is 24
_std1.setMarks(500);
_std1.getMarks();    // output is 500

Két osztályod van, a Person és a Student. A Student kiterjeszti a Person osztályt, és a Student-ből létrehozott objektum hozzáférhet a saját metódusaihoz és tulajdonságaihoz, valamint a kiterjesztett osztályéhoz is.

Most adjunk hozzá néhány változtatást a fenti osztályhoz.

Példa:

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks; // the derived property must be assigned too
    }
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getAge();   // output is 24
_std1.getMarks(); // output is 500

Az előző példához képest a változás egy olyan konstruktor, amelyet a Student osztályban definiálunk. A konstruktor ugyanazokat a paramétereket veszi fel, mint az alaposztály, plusz a saját további paramétereit.

In TypeScript A super függvényt az összes alap osztály paraméterével kell meghívni. Ennek a konstruktoron belüli első utasításnak kell lennie, mivel a super a kiterjesztett osztály konstruktorát hajtja végre. A származtatott osztály által deklarált összes tulajdonságot, például a tmarks-ot, explicit módon kell értékadni, különben a getMarks definiálatlan értéket adna vissza.

Hozzáférés a módosítókhoz TypeScript

TypeScript támogatja a nyilvános, privát és védett hozzáférés-módosítókat a metódusokon és tulajdonságokon. Alapértelmezés szerint, ha nincs megadva hozzáférés-módosító, a metódus vagy tulajdonság nyilvánosnak tekintendő, és könnyen elérhető az osztály objektumából.

Privát hozzáférésű módosítók esetén a tagok nem érhetők el az osztály objektumából, és csak az osztályon belüli használatra szánták őket. Nem érhetők el egy örökölt osztály számára.

Védett hozzáférés-módosítók esetén a tagok az osztályon és az örökölt osztályon belüli használatra szolgálnak, és nem érhetők el az osztály objektumából.

Példa:

class Person {
    protected name: string;
    protected age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    private getName(): string {
        return this.name;
    }

    getDetails(): string {
        return "Name is " + this.getName();
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks;
    }
    getMarks(): number {
        return this.tmarks;
    }

    getFullName(): string {
        return this.name;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getMarks();    // output is 500
_std1.getFullName(); // output is Sheena
_std1.getDetails();  // output is Name is Sheena
változás Ugyanaz az osztály Származtatott osztály Az osztály tárgya
nyilvános Igen Igen Igen
védett Igen Igen Nem
magán Igen Nem Nem

Interfész be TypeScript

Az egyik alapvető jellemzője TypeScript az interfészek. Az interfész egy szabályhalmaz, amelyet az azt használó entitásnak kell megvalósítania. Az entitás lehet osztály, függvény vagy változó. Egy interfész tulajdonságokból és metódusokból állhat. Egy tulajdonságot vagy metódust opcionálisként jelölhetünk meg a „?” szintaxis használatával. Az interfész egy erős típusellenőrzést ad hozzá minden függvényhez, változóhoz vagy osztályhoz, amely megvalósítja.

Egy interfész szintaxisa in TypeScript

interface Dimension {
    width: string;
    height: string;
}

Definiáltál egy Dimension nevű interfészt, amelynek a width és height tulajdonságai vannak, mindkettő karakterlánc típusú.

Ez az interfész most megvalósítható egy változóval, egy függvénnyel vagy egy osztállyal. Íme egy példa egy változóra, amely megvalósítja a Dimension interfészt.

Példa:

interface Dimension {
    width: string;
    height: string;
}

let _imagedim: Dimension = {
    width: "100px",
    height: "200px"
};

A Dimension interfész szignatúrája szélességgel és magassággal rendelkezik, és mindkettő kötelező. Ha bármelyik tulajdonság kimarad, vagy egy típus megváltozik, fordítási idejű hibát kap a kód fordításakor. JavaForgatókönyv.

A fenti kód, amikor lefordítottuk JavaA szkript a következőképpen néz ki:

var _imagedim = {
    width: "100px",
    height: "200px"
};

Nézzük most meg, hogyan használjunk egy interfészt egy funkcióval.

Interface használata egy függvényen visszatérési típusként

interface Dimension {
    width: string;
    height: string;
}

function getDimension() : Dimension {
    let width = "300px";
    let height = "250px";
    return {
        width: width,
        height: height
    }
}

A fenti példában a getDimension() függvény visszatérési típusa a Dimension interfész. A visszatérési értéknek meg kell egyeznie az interfészben deklarált tulajdonságokkal és típusokkal.

Az összeállított JavaA szkript kódja a következő lesz:

function getDimension() {
    var width = "300px";
    var height = "250px";
    return {
        width: width,
        height: height
    };
}

Fordítás során, ha a visszatérési típus nem egyezik meg az interfész típusával, hibát dob.

Interfész mint függvényparaméter

interface Dimension {
    width: string;
    height: string;
}

function getDimension(dim: Dimension) : string {
    let finaldim  = dim.width + "-" + dim.height;
    return finaldim;
}

getDimension({width:"300px", height:"250px"}); // "300px-250px"

A fenti példában a Dimension interfészt a getDimension() függvény paramétereként használtad. A függvény meghívásakor az átadott paraméternek meg kell egyeznie az interfész által definiált szabályokkal.

Az összeállított JavaA szkript kódja a következő lesz:

function getDimension(dim) {
    var finaldim = dim.width + "-" + dim.height;
    return finaldim;
}
getDimension({ width: "300px", height: "250px" });

Interfész megvalósítására szolgáló osztály

Egy osztályhoz tartozó interfész használatához a kulcsszót kell használnod. munkagépek.

Egy interfészt megvalósító osztály szintaxisa:

class NameofClass implements InterfaceName {
}

A következő példa egy osztályokkal működő interfészt mutat be.

interface Dimension {
    width : string,
    height: string,
    getWidth(): string;
}

class Shapes implements Dimension {
    width: string;
    height: string;
    constructor (width:string, height:string) {
        this.width = width;
        this.height = height;
    }
    getWidth() {
        return this.width;
    }
}

A fenti példában definiáltad a Dimension interfészt a width és height tulajdonságokkal, mindkettő string típusú, valamint egy getWidth() nevű metódust, amely egy karakterláncot ad vissza.

Az összeállított JavaA szkript kódja a következő lesz:

var Shapes = /** @class */ (function () {
    function Shapes(width, height) {
        this.width = width;
        this.height = height;
    }
    Shapes.prototype.getWidth = function () {
        return this.width;
    };
    return Shapes;
}());

Funkciók be TypeScript

A függvények utasítások halmazai, amelyeket egy feladat végrehajtásához hajtanak végre. JavaSzkript, a kód nagy része függvények formájában íródik, és ezek fontos szerepet játszanak. A TypeScript Vannak elérhető osztályaid, interfészeid, moduljaid és névtereid, de a függvények továbbra is fontos szerepet játszanak. A különbség egy függvény és egy JavaScript és TypeScript a paraméter és a visszatérési típusok elérhetők egy TypeScript funkciót.

JavaSzkript funkció:

function add (a1, b1) {
   return a1+b1;
}

TypeScript funkció:

function  add(a1 : number, b1: number) : number {
    return a1 + b1;
}

A fenti függvényben a függvény neve összeadás, a paraméterek pedig a következők: a1 és a b1, mindkettő szám típusú, és a visszatérési típus is szám. Ha karakterláncot adsz át a függvénynek, akkor fordítási idejű hibát dob ​​a fordítás során. JavaForgatókönyv.

A függvény hívása: add

let x = add(5, 10);   // will return 15
let b = add(5);       // error TS2554: Expected 2 arguments, but got 1
let c = add(3,4,5);   // error TS2554: Expected 2 arguments, but got 3
let t = add("Harry", "John");
// error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'

A paraméterek a1 és a b1 kötelezőek, és hibát okoznak, ha nem adják meg őket. A paramétertípusok és a visszatérési típus egyformán fontosak, és definiálásuk után nem változhatnak.

Opcionális paraméterek egy függvényhez

In JavaSzkript esetén a függvények összes paramétere opcionális, és ha nem adjuk át őket, akkor nem definiáltnak tekintjük őket. Ugyanez nem igaz a következő esetekben: TypeScriptMiután definiálta a paramétereket, meg kell adnia azokat. Ha opcionális paramétert szeretne, tegyen egy kérdőjelet a paraméter neve után, az alábbiak szerint:

function getName(firstname: string, lastname?: string): string {
    return firstname + lastname;
}

let a = getName("John");              // returns Johnundefined
let b = getName("John", "Harry");     // returns JohnHarry
let c = getName("John", "H", "Harry"); // error TS2554: Expected 1-2 arguments, but got 3

Kérjük, vegye figyelembe, hogy az opcionális paramétereket utoljára kell definiálni. Nem lehet az első paraméter opcionális, a második pedig kötelező, mert a fordító nem tudná, melyik értéket adtuk meg.

Rendeljen hozzá alapértelmezett értékeket a paraméterekhez

Az alábbiak szerint rendelhet alapértelmezett értékeket a paraméterekhez:

function getName(firstname: string, lastname = "Harry"): string {
    return firstname + lastname;
}

let a = getName("John");      // will return JohnHarry
let b = getName("John", "H"); // will return JohnH

Az opcionális paraméterekhez hasonlóan az alapértelmezett inicializált paramétereket is a paraméterlista végén kell tartani.

Nyugalmi paraméterek

Láttad, hogyan TypeScript kezeli a kötelező paramétereket, az opcionális paramétereket és az alapértelmezett érték paramétereket. Most a többi paramétert fogjuk megvizsgálni. A többi paraméter opcionális paraméterek csoportja, amelyeket együttesen definiálunk, három pontok (…) majd a paraméter neve, ami egy tömb.

A nyugalmi paraméterek szintaxisa:

function testFunc(a: string, ...arr: string[]) :string {
    return a + arr.join("");
}

A fentiekből látható, hogy a rest paraméter egy három ponttal előtagolt tömb. A tömb fogja tartalmazni a függvénynek átadott összes többi argumentumot.

Példa:

let a = testFunc("Monday", "Tuesday", "Wednesday", "Thursday");
// output is MondayTuesdayWednesdayThursday

Nyíl funkciók

A nyíl funkció az egyik fontos ES6-ban kiadott funkció, és elérhető TypeScript is. A szintaxisban van egy vastag nyíl, innen ered a név.

Nyíl függvény szintaxisa:

var nameoffunction = (params) => {
 // code here
}

Mire jó egy nyílfüggvény?

Nézzünk egy példát, hogy megértsük egy nyílfüggvény használati esetét.

Példa:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(function () {
            console.log(this.score);    // gives undefined
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Létrehoztál egy függvényt, amelynek a score tulajdonsága 0-ra van inicializálva, valamint egy getScore metódust, amely belsőleg a setTimeout metódust használja, és egy másodperc múlva naplózza a this.score függvényt. A naplózott érték nincs definiálva, annak ellenére, hogy a this.score definiálva és inicializálva van. A probléma a következővel van: ezt kulcsszó. A setTimeout függvényen belüli függvénynek saját this attribútuma van, és mivel a score nincs definiálva rajta, az eredmény is definiálatlan.

Ugyanez kezelhető egy nyílfüggvénnyel is, az alábbiak szerint:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(() => {
            console.log(this.score);   // you get 0
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Egy nyílfüggvénynek nincs sajátja ezt, és ehelyett megosztja az egyet a szülő hatóköréből, így a kívül deklarált változók elérhetők ezzel egy arrow függvényen belül. Hasznosak a rövidebb szintaxis, valamint a visszahívások, eseménykezelők és időzítő függvények miatt.

TypeScript Enums

A TypeScript Az enum egy objektum, amely összefüggő értékek gyűjteményét tárolja együtt. JavaA szkriptek nem támogatják natívan az enumerálásokat. A legtöbb programozási nyelv, mint például a Java, C és C++ támogatási felsorolások, és TypeScript is elérhetővé teszi őket. Az enumerálások az enum kulcsszóval definiálhatók.

Hogyan kell enumot bejelenteni?

Syntax:

enum NameofEnum {
   value1,
   value2,
    ..
}

Példa: Enum

enum Directions {
    North,
    South,
    East,
    West
}

A fenti példában definiált egy Directions nevű enumerációt az Észak, Dél, Kelet és Nyugat értékekkel. Az értékek az első bejegyzésnél 0-tól vannak számozva, és minden további bejegyzésnél 1-gyel nőnek.

Numerikus értékű enum deklarálása

Alapértelmezés szerint, ha egy enumerációs tag nem kap értéket, akkor egy 0-tól kezdődő számot vesz fel. A következő példa egy explicit numerikus értékekkel rendelkező enumerációt mutat be.

enum Directions {
North = 0,
South = 1,
East = 2,
West = 3
}

Megadhatsz egy kezdőértéket is, és a következő tagok növekvő értékeket kapnak. Például:

enum Directions {
North = 5,
South, // will be 6
East,  // 7
West   // 8
}

Most Észak 5-nél kezdődik, tehát Dél 6, Kelet 7, Nyugat pedig 8.

Az alapértelmezett értékek helyett tetszőleges értékeket is megadhat. Például:

enum Directions {
North = 5,
South = 4,
East = 6,
West = 8
}

Hogyan lehet elérni egy Enumot?

A következő példa bemutatja, hogyan használhatsz enumerációt a kódodban:

enum Directions {
    North,
    South,
    East,
    West
}

console.log(Directions.North);      // output is 0
console.log(Directions["North"]); // output is 0
console.log(Directions[0]);       // output is North

Az összeállított JavaA szkript a következő:

var Directions;
(function (Directions) {
    Directions[Directions["North"] = 0] = "North";
    Directions[Directions["South"] = 1] = "South";
    Directions[Directions["East"] = 2] = "East";
    Directions[Directions["West"] = 3] = "West";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

Óta JavaA szkript nem támogatja az enumokat, a fordító az enumot egy önmeghívott függvénnyé alakítja, ahogy fentebb látható. A dupla értékadás hozza létre a fordított leképezést.ping a számtól vissza a névig.

Enum deklarálása karakterlánc értékkel

Tetszőleges karakterlánc-értékeket rendelhet hozzá, ahogy az az alábbi példában látható.

Példa:

enum Directions {
    North = "N",
    South = "S",
    East = "E",
    West = "W"
}

console.log(Directions.North);      // output is N
console.log(Directions["North"]); // output is N
console.log(Directions[0]);       // output is undefined

Az összeállított JavaA szkript a következő:

var Directions;
(function (Directions) {
    Directions["North"] = "N";
    Directions["South"] = "S";
    Directions["East"] = "E";
    Directions["West"] = "W";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

⚠️ Figyelmeztetés: A karakterlánc-felsorolásoknak nincs fordított leképezésükpingHasonlítsa össze a fenti két lefordított kimenetet: a numerikus enum mindkét irányt tárolja, míg a karakterláncos enum csak a nevet és az értéket tárolja. Ezért van az, hogy Directions[0] karakterlánc enumerálás esetén definiálatlan értéket ad vissza.

Miben vannak a modulok TypeScript?

Létrehozott fájlok TypeScript globális hozzáféréssel rendelkeznek, ami azt jelenti, hogy az egyik fájlban deklarált változókhoz egy másik fájlból is hozzá lehet férni. Ez a globális jelleg kódütközéseket és futásidejű problémákat okozhat. Az export és import modul funkcióival elkerülhetők a globális változók és függvények ütközései. Ez a funkció a következő évben jelent meg: JavaSzkript az ES6 kiadással, és a következő verziókban is támogatott: TypeScript.

Miért van szükség modulokra? TypeScript?

A következő példa modulok nélküli problémát mutat be.

Példa teszt1.ts

let age : number = 25;

A test1.ts fájlban definiált egy változó korú típusszámot.

Példa teszt2.ts

A test2.ts fájlban hozzáférhetsz a változóhoz kor a test1.ts fájlban definiált, és módosítsa is az alábbiak szerint:

age = 30; // changed from 25 to 30.
let _new_age = age;

Ez sok problémát okozhat, mivel a változók globálisan elérhetők és bárhonnan módosíthatók.

A modulok, a megírt kód lokális marad a fájlban, és azon kívül nem érhető el. Ahhoz, hogy bármit is megosszunk egy fájlból, azt exportálni kell az export kulcsszó használatával. Export akkor használatos, ha egy változót, osztályt, függvényt vagy interfészt egy másik fájlban szeretnénk használni. import akkor használatos, ha egy exportált elemhez szeretne hozzáférni. Így a kód érintetlen marad a fájlon belül, és még ha ugyanazokat a változóneveket definiálja is, azok nem keverednek össze.

Exportálás és importálás használata

Sokféleképpen lehet exportálni és importálni. A leggyakrabban használt szintaxist fogjuk megvitatni.

Az importálás és az exportálás szintaxisa 1:

export  nameofthevariable or class name or interface name etc

//To import the above variable or class name or interface you have to use import as shown below:

import {nameofthevariable or class name or interfacename} from "file path here without .ts"

Íme egy működő példa az exportálás és importálás használatára.

teszt1.ts

export let age: number = 25;

Az export kulcsszóval megoszthatjuk az age változót egy másik fájllal.

teszt2.ts

import { age } from "./test1"
let new_age :number = age;

Az import kulcsszóval lehet elérni a kor változót, és meg kell adnia a fájl helyét a fent látható módon.

Az import és export szintaxisa 2:

Van egy másik módja is az exportálásnak és importálásnak, a szintaxis az alábbiak szerint alakul:

export = classname;

import classname = require("file path of modulename")

Amikor használ export = A modul exportálásához az importáláshoz a require(„modulnév fájl elérési útja”) függvényt kell használni.

Íme egy működő példa, amely bemutatja az esetet.

Ügyfél.ts

class Customer {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }
}

export = Customer;

testCustomer.ts

import Customer = require("./Customer");

let a = new Customer("Harry", 30);
alert(a.getName());

Modul betöltő

A modulok nem tudnak önállóan működni, ezért egy modulbetöltőre van szükség az importfüggőségek megtalálásához, ahogy az a példában is látható. TypeScript a fenti példákban. Az elérhető modulbetöltők a CommonJS a Nodejs-hez és a Require.js a böngészőben való futtatáshoz.

A CommonJS modulformátum használatával történő kódfordításhoz használja a következő parancsot:

tsc --module commonjs testCustomer.ts

A Requirejs modulformátum használatával történő kódfordításhoz használja a következő parancsot:

tsc --module amd testCustomer.ts

A függő fájlokat a fenti paranccsal js fájlokká konvertáljuk.

Példa a testCustomer.ts fájlról a testCustomer.js fájlra Requirejs használatával

define(["require", "exports", "./Customer"], function (require, exports, Customer) {
    "use strict";
    exports.__esModule = true;
    var a = new Customer("Harry", 30);
    alert(a.getName());
});

Példa Customer.ts konverzióra Customer.js-re Requirejs használatával

define(["require", "exports"], function (require, exports) {
    "use strict";
    var Customer = /** @class */ (function () {
        function Customer(name, age) {
            this.name = name;
            this.age = age;
        }
        Customer.prototype.getName = function () {
            return this.name;
        };
        return Customer;
    }());
    return Customer;
});

A require.js használatával történő teszteléséhez létre kell hoznod egy main.js nevű fájlt, amely a függőségekre hivatkozik az ábrán látható módon.

Íme a mappa szerkezete:

src/
    Customer.js
    testCustomer.js
    main.js
    require.js  // you can get this file from github or npm install requirejs
    test.html

main.js

define(function (require) {
    var customer = require("./Customer");
    var testCustomer = require("./testCustomer");
});

test.html

<!DOCTYPE html>
<html>
<head>
    <title>TypeScript Module testing using Requirejs</title>
    <script data-main="main" src="require.js"></script>
</head>
<body>
    <h3>Testing modules using Requirejs</h3>
</body>
</html>

Modul betöltő

Névterek be TypeScript

A névtér osztályok, interfészek, változók és függvények gyűjteményét tartalmazza egyetlen fájlban.

Névtér szintaxis

namespace name{

export class {
}

export interface {
}

export const constname;

}

A kapcsolódó kód egyetlen névtér alatt érhető el.

Névtér működési példa: tesztnévtér.ts

namespace StudentSetup {

    export interface StudDetails {
        name: string;
        age: number;
    }

    export function addSpace(str) { // will add space to the string given
        return str.split("").join(" ");
    }

    export class Student implements StudDetails {
        name: string;
        age: number;

        constructor(studentdetails: StudDetails) {
            this.name = studentdetails.name;
            this.age = studentdetails.age;
        }

        getName(): string {
            return this.name;
        }
    }
}

A névtér neve Diákbeállítás, és hozzáadtál egy StudDetails interfészt, egy addSpace függvényt és egy Student nevű osztályt.

Névtér elérése

A következő kódrészletben használod a névteret Diákbeállítás.

testStudentSetup.ts

let a = new StudentSetup.Student({ name: "Harry", age: 20 });

console.log("The name is :" + StudentSetup.addSpace(a.getName()));

A névtérben elérhető osztályra, interfészre vagy függvényre a névtér nevével kell hivatkozni, például StudentSetup.addSpace a funkció eléréséhez és StudentSetup.Student az osztály eléréséhez.

Mindkét fájlt egyetlen js fájlba fordíthatod az alábbiak szerint:

tsc --outFile namespace.js testnamespace.ts  testStudentSetup.ts

Ellenőrizd a parancssor kimenetét az alábbi paranccsal:

node namespace.js

output:

The name is :H a r r y

Környezeti nyilatkozatok be TypeScript

TypeScript lehetővé teszi harmadik féltől származó eszközök használatát JavaKörnyezeti deklarációkat használó szkriptfájlok. Ennek a funkciónak az az előnye, hogy nem kell átírni a könyvtárat, mégis használhatod az összes funkcióját típusellenőrzéssel. TypeScript.

Ambient szintaxis

Egy ambient modul deklarálásához:

declare module moduleName {
   //code here
}

Az ambient fájlt a következőképpen kell menteni:

filename.d.ts

A fájl használatához fájlnév.d.ts a .ts fájlodban a következőképpen kell hivatkoznod rá:

/// <reference path="filename.d.ts"/>

A környezeti típus deklarációja TypeScript harmadik féltől származó könyvtárra hivatkozik, és a szükséges függvényeket saját típusokkal újradeklarálja. Vegyük például a kis JavaAz alább látható szkriptkönyvtár.

Harmadik fél JavaSzkriptfájl: testString.js

var StringChecks = {
    isString: function (str) {
        return typeof str === "string";
    },

    convertToUpperCase: function (str) {
        return str.toUpperCase();
    },

    convertToLowerCase: function (str) {
        return str.toLowerCase();
    },

    convertToStringBold: function (str) {
        return str.bold();
    }
};

Van egy StringChecks nevű objektumod, amelynek az isString, convertToUpperCase, convertToLowerCase és convertToStringBold függvényei vannak.

Ambient modul létrehozása TypeScript

Most létrehozunk egy ambient modult, amely hivatkozik a JavaA fenti szkriptfüggvényeket használja, és szükség szerint típusellenőrzéseket ad hozzá.

Fájlnév: tstring.d.ts

declare module TestString {

    export interface StringsFunc {
        isString(str: string): boolean;
        convertToUpperCase(str: string): string;
        convertToLowerCase(str: string): string;
        convertToStringBold(str: string): string;
    }
}

declare var StringChecks: TestString.StringsFunc;

Definiálsz egy TestString nevű modult, és exportálod a StringsFunc interfészt. Minden egyes szignatúra meghatározza, hogy mit fogad el és mit ad vissza a függvény:

  • isString(str: string): logikai érték – egy karakterláncot vesz fel és egy logikai értéket ad vissza. Szám vagy bármilyen más típus átadása fordítási idejű hibát okoz.
  • konvertNagyCase-re(string: string): string – egy karakterláncot vesz fel és egy karakterlánccal tér vissza.
  • konvertKisCase-re(string: string): string – egy karakterláncot vesz fel és egy karakterlánccal tér vissza.
  • convertToStringBold(str: string): karakterlánc – egy karakterláncot vesz fel és egy karakterlánccal tér vissza.

Mivel a JavaA szkriptfájlban elérhető a StringChecks objektumnév, végül a .d.ts fájlban is erre a névre hivatkozunk:

declare var StringChecks: TestString.StringsFunc;

Ambient modul használata TypeScript

Itt található a test.ts fájl, amely a tstring.d.ts környezeti fájlt használja.

/// <reference path="tstring.d.ts"/>
let str1 = StringChecks.isString("Hello World");
console.log(str1);
let str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
let str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
let str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Fordítsd le a tsc test.ts segítségével a test.js létrehozásához:

/// <reference path="tstring.d.ts"/>
var str1 = StringChecks.isString("Hello World");
console.log(str1);
var str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
var str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
var str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Mostantól a test.js függvénykönyvtárat egy HTML fájlban használhatod a testString.js függvénykönyvtárfájllal együtt.

<html>
<head>
    <title>Test TypeScript Ambient</title>
    <script src="testString.js"></script>
    <script src="test.js"></script>
</head>
<body>
</body>
</html>

output:

true
HELLO WORLD
hello
<b>Hello World</b>

💡 Tipp: Népszerű könyvtárak esetén ritkán kell .d.ts fájlt írnod. Telepítsd helyette például a közösség által karbantartott típusokat. npm install --save-dev @types/lodash, és a fordítóprogram automatikusan felveszi őket.

A folytatáshoz hasonlítsa össze közvetlenül a két nyelvet TypeScript vs JavaForgatókönyv, látogasson el újra JavaSzkript tömbmetódusok az itt használt, típus nélküli megfelelőkért, és tanulmányozza hurkok be JavaForgatókönyv és a belső és külső JavaForgatókönyv a böngésző alapjaihoz, amelyekre a fordított kimenet támaszkodik.

GYIK

Nem. Egy böngésző végrehajtja JavaCsak szkript, ezért a .ts fájlt először le kell fordítani a tsc-vel vagy egy kötegelővel. A típusannotációk törlődnek ebben a lépésben, és nincsenek futásidejű költségeik.

Igen. Engedélyezd az allowJs-t a tsconfig.json fájlban, és nevezd át a fájlokat egyenként. Mert minden JavaA szkriptfájl már érvényes TypeScript, a projekt a migráció során folyamatosan fordul.

Egy interfész újra megnyitható és kibővíthető, és ez az objektumalakok szokásos választása. A típusalias lefedi az uniókat, tuple-ket és primitíveket is, amelyeket az interfészek nem tudnak kifejezni.

Használjon modulokat exportáláshoz és importáláshoz. A névterek az ES moduloknál régebbiek, és főként deklarációs fájlok és régebbi, szkripteken alapuló kódbázisok esetében maradnak hasznosak.

Igen, mérhetően. A fordító azonnal elutasítja a hallucinált tulajdonságokat és a hibás argumentumtípusokat, így egy generált kódrészlet vagy típust ellenőriz, vagy pontosan jelzi, hogy hol hibás.

A szerkesztőintegrációk a környező típusokat és .d.ts fájlokat betáplálják a modell kontextusába. A gazdagabb annotációk ezért pontosabb kiegészítéseket eredményeznek, mint a lazán típusos kód.

Foglald össze ezt a bejegyzést a következőképpen: