TypeScript Tutorial: Cos'รจ un'interfaccia, un'enumerazione e un array?

โšก Riepilogo intelligente

TypeScript รจ un superinsieme fortemente tipizzato di JavaScript che viene compilato in codice sorgente JavaQuesto script aggiunge classi, interfacce, enum, moduli e namespace. L'articolo tratta l'installazione, le variabili, i tipi, gli array, le classi, i modificatori di accesso, le interfacce, le funzioni, gli enum, i moduli e le dichiarazioni ambientali.

  • ๐Ÿงฌ Relazione linguistica: Ogni valido JavaIl programma di script รจ valido TypeScripte il compilatore emette codice semplice JavaScript per qualsiasi versione di destinazione.
  • ๐Ÿ”’ Statico Typing: Una variabile mantiene il tipo specificato al momento della dichiarazione, pertanto un'eventuale discrepanza viene segnalata in fase di compilazione anzichรฉ in fase di esecuzione.
  • ๐Ÿงฑ Orientamento agli oggetti: Classi, ereditarietร  e modificatori public, private e protected conferiscono una struttura familiare al codice del browser.
  • ๐Ÿ“ Interfacce: Un'interfaccia definisce una connessionetracElenco di proprietร  e metodi che una variabile, una funzione o una classe devono soddisfare.
  • ๐Ÿ”ข Enumerazioni: I set di costanti denominati vengono compilati in funzioni auto-invocate, poichรฉ JavaLo script non ha un tipo enum nativo.
  • ๐Ÿ“ฆ moduli: Le operazioni di esportazione e importazione mantengono le dichiarazioni locali al file e prevengono conflitti di nomi globali.
  • ???? Dichiarazioni ambientali: Un file .d.ts descrive una terza parte JavaLibreria di script in modo che il controllo dei tipi venga applicato senza doverlo riscrivere.

TypeScript Tutorial

Cosa รจ TypeScript?

TypeScript รจ un superset di JavaScript. TypeScript รจ un linguaggio di programmazione orientato agli oggetti che supporta classi, interfacce e altro. รˆ un linguaggio open-source sviluppato da Microsoft che compila staticamente il codice JavaScript. Puรฒ essere eseguito facilmente in un browser o in Node.js.

Sono supportate tutte le ultime funzionalitร  rilasciate per ECMAScript TypeScripte inoltre TypeScript possiede le proprie caratteristiche orientate agli oggetti come interfacce, dichiarazioni ambientali ed ereditarietร  di classe, che aiutano nello sviluppoping una grande applicazione che altrimenti sarebbe difficile da realizzare JavaCopione.

La relazione รจ unidirezionale. Ogni valido JavaIl file di script รจ giร  valido TypeScript, ma il contrario non รจ vero, perchรฉ le annotazioni di tipo esistono solo in TypeScript e vengono cancellati durante la compilazione.

Perchรฉ usare TypeScript?

Ecco i vantaggi principali dell'utilizzo TypeScript:

  • Grandi e complessi progetti in JavaGli script sono difficili da codificare e gestire.
  • TypeScript Aiuta molto nell'organizzazione del codice e corregge la maggior parte degli errori durante la compilazione anzichรฉ in fase di esecuzione.
  • TypeScript Supporta librerie JS e documentazione API.
  • Si tratta di un linguaggio di scripting a tipizzazione opzionale, quindi i tipi possono essere adottati gradualmente.
  • TypeScript il codice puรฒ essere convertito in codice semplice JavaCodice script per qualsiasi browser di destinazione.
  • Offre una migliore strutturazione del codice e tecniche di programmazione orientata agli oggetti.
  • Consente un migliore supporto degli strumenti in fase di sviluppo, tra cui il completamento automatico e il refactoring sicuro.
  • Puรฒ estendere il linguaggio oltre lo standard, con funzionalitร  come i decoratori.

Il vantaggio pratico piรน significativo รจ il supporto dell'editor. Poichรฉ il compilatore conosce la struttura di ogni valore, un editor puรฒ rinominare una proprietร  in tutto il progetto e segnalare ogni punto in cui la struttura non corrisponde piรน.

TypeScript Storia

Vediamo i punti di riferimento piรน importanti della storia di TypeScript:

  • Dopo due anni di sviluppo interno presso Microsoft, TypeScript La versione 0.9 รจ stata rilasciata nel 2013.
  • TypeScript La versione 1.0, con supporto aggiuntivo per i tipi generici, รจ stata rilasciata alla Build 2014.
  • Nel luglio 2014, un nuovo TypeScript รˆ arrivato un compilatore cinque volte piรน veloce della versione precedente.
  • Nel luglio 2015 รจ stato aggiunto il supporto per i moduli ES6, la parola chiave namespace, forโ€ฆof e i decoratori.
  • Nel novembre 2016 sono stati aggiunti i tipi mappati, i tipi chiave e di ricerca, e il resto e la diffusione degli oggetti.
  • Il 27 marzo 2018 sono stati aggiunti i tipi condizionali e una versione migliorata di keyof con i tipi di intersezione.
  • TypeScript La versione 5.0, rilasciata a marzo 2023, ha modernizzato i decoratori e ridotto le dimensioni del pacchetto.
  • TypeScript La versione 6.0 รจ arrivata nel marzo 2026 come rilascio finale basato su JavaCodice sorgente dello script.
  • TypeScript La versione 7.0 sposta il compilatore a un'implementazione nativa di Go, che Microsoft Secondo le segnalazioni, รจ circa dieci volte piรน veloce della versione 6.0.

Chi usa TypeScript?

TypeScript Non รจ piรน una scelta di nicchia. รˆ alla base di molti degli strumenti front-end e back-end piรน diffusi, e l'elenco seguente mostra dove รจ piรน probabile che un principiante lo incontri.

  • Angolare: Il framework Angular รจ scritto in TypeScripte si prevede che anche il codice dell'applicazione venga scritto in esso.
  • Progetti React e Vue: Entrambi gli ecosistemi sono ufficiali di bordo TypeScript modelli, e la maggior parte degli starter moderni lo abilita di default.
  • Backend Node.js: I framework server come NestJS sono costruiti attorno TypeScript classi e decoratori.
  • Strumenti di modifica: Visual Studio Code รจ di per sรฉ un grande TypeScript codice sorgente, ed รจ per questo che il supporto linguistico รจ cosรฌ completo.
  • Front-end per grandi aziende: I team che lavorano con molti collaboratori lo adottano per individuare gli errori di integrazione prima della distribuzione.

Come scaricare e installare TypeScript

Ecco la procedura passo passo per scaricare e installare TypeScript:

Passaggio 1) Scarica e installa Nodejs

Vai al sito ufficiale di Nodejs, https://nodejs.org/en/download/e scaricare e installare Nodejs per il proprio sistema operativo. Istruzioni dettagliate sono disponibili nella guida su Come scaricare e installare Node.js.

Passaggio 2) Controlla la versione di Nodejs e npm

Per verificare se Node.js e npm sono installati, controlla la versione nel prompt dei comandi.

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

D:\typeproject>npm --version
10.9.2

Qualsiasi versione LTS corrente di Node funziona. TypeScript Richiede solo una versione di Node supportata per eseguire il compilatore.

Passo 3) TypeScript Installazione

Crea la directory del tuo progetto (tipoproject\) ed esegui npm init, come mostrato nel comando seguente:

npm init

Passaggio 4) Avviare l'installazione

Questo crea il file package.json, che conterrร  le dipendenze del nostro progetto.

Una volta terminato, installare TypeScript come segue:

npm -g install typescript

Il comando precedente si occuperร  dell'installazione TypeScriptAggiungendo โ€œ-gโ€ a npm install verrร  installato TypeScript a livello globale. Il vantaggio di usare -g รจ che potrai usare il TypeScript TSC comando da qualsiasi directory, poichรฉ รจ installato globalmente. Nel caso in cui non si desideri installare TypeScript A livello globale, utilizzare il comando seguente:

npm install --save-dev typescript

Crea una cartella src\ nella directory del tuo progetto e all'interno di src\ crea il TypeScript file test.ts e scrivi il tuo codice.

Esempio: test.ts

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

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

Compilare TypeScript codice a Javascript

Per compilare il codice sopra riportato, utilizzare il seguente comando.

If TypeScript per l'installazione globale utilizzare il comando seguente:

tsc test.ts

If TypeScript รจ installato localmente nel tuo progetto devi usare il percorso di TypeScript dalla cartella node_modules, come mostrato, oppure eseguilo tramite npx:

node_modules\typescript\bin\tsc test.ts

OR

npx tsc test.ts

Il comando precedente creerร  un file test.js che conterrร  il codice compilato in JavaScript.

Esempio: test.js

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

Eseguire Javascript utilizzando Nodejs

Ora eseguiremo test.js in Node.js come segue:

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

Il valore passato a console.log viene visualizzato quando viene eseguito test.js.

Eseguire JavaScript nel browser

Esempio:

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

Eseguire Javascript utilizzando Nodejs

Compilare TypeScript codice a Javascript utilizzando la versione EcmaScript

TypeScript Il browser supporta tutte le funzionalitร  di ECMAScript rilasciate e gli sviluppatori possono utilizzarle durante la programmazione. Tuttavia, non tutte le nuove funzionalitร  sono supportate dai browser meno recenti, quindi potrebbe essere necessario compilare il codice per una versione precedente di ECMAScript. TypeScript fornisce opzioni del compilatore che fanno esattamente questo.

Esempio: test.ts

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

addnumbers(10, 20);

Per compilare nella versione ES di tua scelta, puoi utilizzare l'opzione target o t nel tuo comando come segue:

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

Per impostazione predefinita, il target รจ ES3 per il compilatore classico. Se si desidera modificarlo, รจ possibile utilizzare il comando sopra indicato.

Al momento utilizzeremo ES6 come target:

tsc --target ES6  test.ts

test.ts in test.js

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

addnumbers(10, 20);

Il codice rimane invariato perchรฉ la funzione freccia che hai utilizzato รจ una funzionalitร  di ES6 e non subisce modifiche quando viene compilata in ES6.

Per impostazione predefinita il target รจ ES3, quindi senza un target si ottiene test.js come:

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

Quindi, in questo caso, la freccia spessa viene sostituita da una normale funzione anonima.

Suggerimento: Invece di passare le opzioni sulla riga di comando ogni volta, esegui tsc --init per generare un file tsconfig.json. Il compilatore legge quindi le impostazioni target, outDir e strict da tale file per l'intero progetto.

Variabili in TypeScript

Variabili vengono utilizzati per memorizzare valori e il valore puรฒ essere una stringa, un numero, un valore booleano o un'espressione. Quando si tratta di variabili in TypeScript, sono simili a JavaCopione. Impariamo quindi a dichiarare e assegnare un valore alle variabili in TypeScript.

Le variabili non possono essere utilizzate nel codice senza essere definite. Per dichiarare una variabile puoi usare

var parola chiave,

lasciare parola chiave

const parola chiave

Lavorare con le variabili in TypeScript รจ simile JavaScript e utenti che hanno familiaritร  con JavaLo script lo troverร  molto facile. Nel codice moderno, lasciare and const sono preferiti su var, perchรฉ il loro ambito di blocco impedisce un'intera classe di bug.

Dichiarare variabili utilizzando var

Sintassi:

var firstname = "Roy";

Diamo un'occhiata ad alcuni TypeScript esempi per comprendere il funzionamento della parola chiave var e anche l'ambito delle variabili dichiarate utilizzando var parola chiave.

Esempio 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

Esempio 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

Esempio 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

Dichiarare variabili utilizzando let

Migliori TypeScript la sintassi di let รจ la seguente:

Sintassi:

let name = "Roy";

Il funzionamento del lasciare la variabile รจ quasi la stessa di var, ma con un'importante differenza, che l'esempio seguente illustra.

Esempio:

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

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

Quanto sopra TypeScript l'esempio genera un errore, ma lo stesso codice avrebbe funzionato con var parola chiave. Variabili dichiarate usando lasciare sono disponibili solo all'interno del blocco in cui sono dichiarati. In questo esempio, t esiste solo all'interno del blocco if, non nell'intera funzione.

Lo stesso principio si applica all'interno di qualsiasi funzione, ciclo for, ciclo while o blocco switch. Una variabile `let` รจ disponibile solo all'interno di quel blocco e farvi riferimento all'esterno genera un errore. Questa รจ la principale differenza tra `var` e `let`.

Dichiarare variabili utilizzando const

Const indica le variabili costanti. Sono simili alle variabili let, con la differenza che una volta assegnato un valore, questo non puรฒ essere modificato. Una dichiarazione const deve quindi essere inizializzata sulla stessa riga.

Sintassi:

const name = "Roy";

Esempio:

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

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

Quindi, usa `const` ogni volta che sai che il valore assegnato non verrร  riassegnato. Tieni presente che `const` impedisce la riassegnazione del binding, non la modifica dell'oggetto a cui punta.

Digita in TypeScript

TypeScript รจ un linguaggio fortemente tipizzato, mentre JavaLo script non lo รจ. Una variabile il cui valore รจ definito come stringa puรฒ essere cambiato in un numero senza alcun problema in JavaSceneggiatura. Lo stesso non รจ tollerato in TypeScript. in TypeScript, il tipo di una variabile รจ definito all'inizio e durante l'esecuzione deve mantenere quel tipo. Qualsiasi modifica porta a un errore in fase di compilazione durante la compilazione a JavaScript.

Di seguito sono riportate le tipologie principali:

Tipo accetta Dichiarazione di esempio
numero Numeri interi, numeri decimali e frazioni sia a: numero = 10;
stringa Solo valori di testo lascia s: stringa = โ€œciaoโ€;
booleano solo vero o falso lascia b: booleano = vero;
in qualsiasi Qualsiasi valore, nessun controllo applicato sia x: qualsiasi = 123;
nulla Assenza di un valore di ritorno funzione f(): void {}

Numero

Accetta solo numeri interi, numeri decimali, frazioni e valori numerici simili.

Sintassi:

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

Ecco alcuni metodi importanti che possono essere utilizzati con i tipi numerici:

aRisolto() โ€“ convertirร  il numero in una stringa mantenendo le cifre decimali passate al metodo.

accordare() โ€“ questo metodo convertirร  il numero in una stringa.

valore di() โ€“ questo metodo restituirร  il valore primitivo del numero.

allaPrecisione() โ€“ questo metodo formatterร  il numero su una lunghezza specificata.

Esempio: con tutti i metodi numerici

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

Corda

Stringa: solo valori di tipo stringa.

Sintassi:

let str :string = "hello world";

Ecco alcuni metodi importanti che possono essere utilizzati con i tipi stringa:

  • dividere() โ€“ questo metodo dividerร  la stringa in un array.
  • charat() โ€“ questo metodo restituirร  il carattere all'indice specificato.
  • indice di() โ€“ questo metodo restituirร  la posizione della prima occorrenza del valore fornito.
  • sostituire() โ€“ questo metodo accetta 2 stringhe. Cerca il primo valore nella stringa e, se presente, lo sostituisce con il secondo, restituendo una nuova stringa.
  • tagliare() โ€“ questo metodo rimuoverร  gli spazi bianchi da entrambi i lati della stringa.
  • substr() โ€“ questo metodo restituirร  una parte della stringa, a seconda della posizione iniziale e della lunghezza specificata.
  • sottostringa() โ€“ questo metodo restituirร  una parte della stringa, a seconda delle posizioni di inizio e fine. Il carattere in posizione finale รจ escluso.
  • in maiuscolo() โ€“ convertirร  la stringa in maiuscolo.
  • toLowerCase() โ€“ convertirร  la stringa in minuscolo.

Esempio:

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"

Booleano

Un valore booleano accetta solo i valori logici vero e falso. A differenza del semplice JavaScript, i numeri 0 e 1 non sono accettati perchรฉ sono di tipo numerico.

Sintassi:

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

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

Qualsiasi

Sintassi:

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

Variabili dichiarate utilizzando il in qualsiasi Il tipo puรฒ contenere una stringa, un numero, un array, un valore booleano o essere vuoto. TypeScript non genererร  alcun errore in fase di compilazione, il che รจ simile alle variabili in JavaScript. Utilizzare any type solo quando non si รจ certi del tipo di valore che verrร  associato a quella variabile, perchรฉ disattiva ogni controllo su quel valore.

vuoto

Il tipo void viene utilizzato principalmente come tipo di ritorno di una funzione che non restituisce alcun valore.

Sintassi:

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

TypeScript Italia

An Italia in TypeScript รจ un tipo di dati in cui รจ possibile memorizzare piรน valori. Impariamo come dichiarare e assegnare valori per le operazioni sugli array in TypeScript.

Dal TypeScript รˆ un linguaggio fortemente tipizzato, quindi รจ necessario specificare il tipo di dati dei valori in un array. Altrimenti, verranno trattati come di tipo "any".

Dichiarare e inizializzare un array

Sintassi:

let nameofthearray : Array<typehere>

Esempio

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

Diversi modi per accedere agli elementi di un array

Per ottenere gli elementi da un array, i valori partono dall'indice 0 e arrivano fino alla lunghezza dell'array meno uno.

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

รˆ anche possibile ottenere gli elementi da un array utilizzando un TypeScript per loop, come mostrato di seguito.

utilizzando TypeScript per loop

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

Produzione:

2016
2017
2018
2019

โš ๏ธ Attenzione: La condizione del ciclo deve essere i < years.length. scrittura i <= years.length esegue un'iterazione extra e stampa undefined, perchรฉ l'ultimo indice valido รจ sempre la lunghezza meno uno.

Utilizzo del ciclo for-in

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

Produzione:

2016
2017
2018
2019

Utilizzo del ciclo for-of

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

Produzione:

2016
2017
2018
2019

Utilizzo del ciclo forEach

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

Produzione:

2016
2017
2018
2019

TypeScript Metodi di matrice

Migliori TypeScript L'oggetto Array possiede numerose proprietร  e metodi che aiutano gli sviluppatori a gestire gli array in modo semplice ed efficiente. รˆ possibile ottenere il valore di una proprietร  specificando arrayname.property e l'output di un metodo specificando arrayname.method().

Member Missione Resi
lunghezza Numero di elementi nell'array numero
inversione() Reversel'ordine degli elementi in posizione Lo stesso array
ordinare() Ordina gli oggetti al loro posto Lo stesso array
pop () Rimuove l'ultimo elemento L'elemento rimosso
cambio() Rimuove il primo elemento L'elemento rimosso
Spingere() Aggiunge un valore come ultimo elemento La nuova lunghezza
concat() Unisce due array in uno solo Un nuovo array

Esempio per la proprietร  della lunghezza

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

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

Esempio di metodo inverso

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

Esempio per il metodo di ordinamento

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

Esempio per il metodo pop

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

Esempio per il metodo dello spostamento

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

Esempio per il metodo push

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

Esempio per il metodo concat

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]

classe in TypeScript

TypeScript รจ un superset di JavaScript, quindi tutto ciรฒ che รจ possibile in JavaLa sceneggiatura รจ possibile anche in TypeScript. La classe รจ una funzionalitร  aggiunta da ES6 in poi. In precedenza in JavaLa funzionalitร  di script e classe รจ stata ottenuta utilizzando una funzione con metodi prototipo per riutilizzare il codice. Utilizzando le classi, il tuo codice puรฒ avvicinarsi a linguaggi come Java, C# e Pythondove il codice รจ facilmente riutilizzabile.

Definizione di una classe in TypeScript

Ecco la sintassi di base della classe in TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class
}

Esempio: un esempio funzionante su Class

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

Nell'esempio precedente, hai una classe chiamata Students. Essa ha le proprietร  age, name e roll_no.

Costruttore in a TypeScript Classe

La classe Students definita sopra ha un costruttore come mostrato di seguito:

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

Il metodo costruttore ha i parametri etร , nome e numero di matricola. Il costruttore si occupa dell'inizializzazione delle proprietร  quando la classe viene istanziata. Le proprietร  vengono accedute tramite questo parola chiave, ad esempio this.age per accedere all'etร  e this.roll_no per accedere al numero di matricola. รˆ anche possibile avere un costruttore predefinito, come mostrato di seguito:

constructor () {}

Metodi all'interno di a TypeScript Classe

Nella classe Students sono definiti dei metodi, ad esempio getRollNo(), getName() e getAge(), che restituiscono i valori delle proprietร  roll_no, name e age.

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

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

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

Creazione di un'istanza di una classe in TypeScript

In TypeScriptPer creare un'istanza di una classe, si utilizza l'operatore `new`. Quando si crea un'istanza con `new`, si ottiene un oggetto che puรฒ accedere alle proprietร  e ai metodi della classe, come mostrato di seguito:

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

Compilazione di un TypeScript Classe a JavaCopione

รˆ possibile utilizzare il comando tsc come mostrato di seguito per compilare JavaScript.

Command: tsc  Students.ts

L'output di JavaIl codice dello script in fase di compilazione รจ quello mostrato di seguito:

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 JavaScript, la classe viene convertita in una funzione auto-invocata.

Ereditร  di classe

Le classi possono essere ereditate utilizzando il file si estende parola chiave in TypeScript.

Sintassi dell'ereditarietร  della classe:

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

}

classe B potrร  condividere classe A metodi e proprietร .

Ecco un esempio funzionante di una classe che utilizza l'ereditarietร :

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

Hai due classi, Persona e Studente. Studente estende Persona, e l'oggetto creato da Studente puรฒ accedere ai propri metodi e proprietร , cosรฌ come a quelli della classe che estende.

Ora apportiamo alcune modifiche alla classe sopra.

Esempio:

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

La differenza rispetto all'esempio precedente consiste nella definizione di un costruttore nella classe Student. Il costruttore accetta gli stessi parametri della classe base, piรน eventuali parametri aggiuntivi propri.

In TypeScript รˆ necessario chiamare `super` con tutti i parametri della classe base. Questa deve essere la prima istruzione all'interno del costruttore, perchรฉ `super` esegue il costruttore della classe estesa. Qualsiasi proprietร  dichiarata dalla classe derivata, come ad esempio `tmarks`, deve quindi essere assegnata esplicitamente, altrimenti `getMarks` restituirebbe `undefined`.

Accedi ai modificatori in TypeScript

TypeScript Supporta i modificatori di accesso pubblico, privato e protetto per metodi e proprietร . Per impostazione predefinita, se non viene specificato alcun modificatore di accesso, il metodo o la proprietร  sono considerati pubblici e sono facilmente accessibili dall'oggetto della classe.

Nel caso di modificatori di accesso privati, i membri non sono disponibili dall'oggetto della classe e sono destinati ad essere utilizzati solo all'interno della classe stessa. Non sono disponibili per le classi ereditate.

Nel caso dei modificatori di accesso protetto, i membri sono destinati ad essere utilizzati all'interno della classe e della classe ereditata, e non sono accessibili dall'oggetto della classe.

Esempio:

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
Modificare Stessa classe Classe derivata Oggetto della classe
la percezione Si Si Si
protetta Si Si Nodo
tour privati Si Nodo Nodo

Interfaccia in TypeScript

Una delle caratteristiche principali di TypeScript Si tratta di interfacce. Un'interfaccia รจ un insieme di regole che devono essere implementate dall'entitร  che la utilizza. L'entitร  puรฒ essere una classe, una funzione o una variabile. Un'interfaccia puรฒ essere composta da proprietร  e metodi. รˆ possibile contrassegnare una proprietร  o un metodo come opzionale utilizzando la sintassi "?". L'interfaccia aggiunge un controllo di tipo rigoroso per qualsiasi funzione, variabile o classe che la implementi.

Sintassi di un'interfaccia in TypeScript

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

Hai definito un'interfaccia denominata Dimension che ha le proprietร  width e height, entrambe di tipo stringa.

Questa interfaccia puรฒ essere implementata tramite una variabile, una funzione o una classe. Ecco un esempio di variabile che implementa l'interfaccia Dimension.

Esempio:

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

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

La firma dell'interfaccia Dimension ha larghezza e altezza, ed entrambe sono obbligatorie. Se manca una proprietร  o viene modificato un tipo, verrร  generato un errore in fase di compilazione durante la compilazione del codice. JavaScript.

Il codice sopra riportato, una volta compilato in JavaLo script si presenta come segue:

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

Vediamo ora come utilizzare un'interfaccia con una funzione.

Utilizzo di un'interfaccia su una funzione come tipo di ritorno

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

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

Nell'esempio precedente, l'interfaccia Dimension viene utilizzata come tipo di ritorno della funzione getDimension(). Il valore di ritorno deve corrispondere alle proprietร  e ai tipi dichiarati nell'interfaccia.

Il compilato JavaIl codice dello script sarร  il seguente:

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

Durante la compilazione, se il tipo di ritorno non corrisponde all'interfaccia, verrร  generato un errore.

Interfaccia come parametro di funzione

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"

Nell'esempio precedente, hai utilizzato l'interfaccia Dimension come parametro della funzione getDimension(). Quando chiami la funzione, il parametro che le viene passato deve corrispondere alle regole definite dall'interfaccia.

Il compilato JavaIl codice dello script sarร  il seguente:

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

Classe che implementa un'interfaccia

Per utilizzare un'interfaccia con una classe, รจ necessario utilizzare la parola chiave attrezzi.

Sintassi per una classe che implementa un'interfaccia:

class NameofClass implements InterfaceName {
}

L'esempio seguente mostra un'interfaccia che interagisce con una classe.

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

Nell'esempio precedente, hai definito l'interfaccia Dimension con le proprietร  width e height, entrambe di tipo stringa, e un metodo chiamato getWidth() che restituisce una stringa.

Il compilato JavaIl codice dello script sarร  il seguente:

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

Funzioni in TypeScript

Le funzioni sono insiemi di istruzioni eseguite per svolgere un compito. JavaNella sceneggiatura, la maggior parte del codice รจ scritta sotto forma di funzioni e queste svolgono un ruolo importante. TypeScript Hai a disposizione classi, interfacce, moduli e namespace, ma le funzioni giocano ancora un ruolo importante. La differenza tra una funzione in JavaScrittura e TypeScript รจ il parametro e i tipi di ritorno disponibili con un TypeScript funzione.

JavaFunzione script:

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

TypeScript funzione:

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

Nella funzione sopra, il nome della funzione รจ add, i parametri sono a1 and b1, entrambi di tipo numero, e anche il tipo di ritorno รจ un numero. Se passi una stringa alla funzione, verrร  generato un errore in fase di compilazione durante la compilazione in JavaScript.

Effettuare una chiamata alla funzione: 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'

I parametri a1 and b1 sono obbligatori e la loro omissione causerร  un errore. I tipi di parametro e il tipo di ritorno sono ugualmente importanti e non possono essere modificati una volta definiti.

Parametri facoltativi per una funzione

In JavaScript, tutti i parametri delle funzioni sono opzionali e sono considerati indefiniti se non vengono passati. Lo stesso non vale in TypeScriptUna volta definiti i parametri, รจ necessario fornirli. Se si desidera che un parametro sia facoltativo, aggiungere un punto interrogativo dopo il nome del parametro, come mostrato di seguito:

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

Si prega di notare che i parametri opzionali devono essere definiti per ultimi. Non รจ possibile avere il primo parametro opzionale e il secondo obbligatorio, perchรฉ il compilatore non saprebbe quale valore รจ stato fornito.

Assegna valori predefiniti a Params

รˆ possibile assegnare valori predefiniti ai parametri come mostrato di seguito:

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

Analogamente ai parametri opzionali, anche i parametri predefiniti inizializzati devono essere mantenuti alla fine dell'elenco dei parametri.

Parametri di riposo

Hai visto come TypeScript gestisce parametri obbligatori, parametri opzionali e parametri con valore predefinito. Ora esamineremo i parametri rimanenti. I parametri rimanenti sono un gruppo di parametri opzionali definiti insieme, utilizzando tre punti (โ€ฆ) seguito dal nome del parametro, che รจ un array.

Sintassi per i parametri Rest:

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

Come mostrato sopra, il parametro rest รจ un array preceduto da tre punti. L'array conterrร  tutti gli argomenti rimanenti passati alla funzione.

Esempio:

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

Funzioni freccia

La funzione freccia รจ una delle funzionalitร  importanti rilasciate in ES6 ed รจ disponibile in TypeScript anche. La sintassi contiene una freccia spessa, da cui deriva il nome.

Funzione freccia Sintassi:

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

A cosa serve una funzione freccia?

Vediamo un esempio per comprendere il caso d'uso di una funzione freccia.

Esempio:

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

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

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

Hai creato una funzione con una proprietร  score inizializzata a 0 e un metodo getScore che internamente utilizza setTimeout e, dopo un secondo, registra this.score. Il valore registrato รจ indefinito anche se this.score รจ definito e inizializzato. Il problema risiede nel questo parola chiave. La funzione all'interno di setTimeout ha il suo this, e poichรฉ score non รจ definito su di esso, il risultato รจ indefinito.

Lo stesso risultato si puรฒ ottenere utilizzando una funzione freccia, come mostrato di seguito:

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

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

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

Una funzione freccia non ha una propria questoe invece condivide quello del suo ambito padre, quindi le variabili dichiarate all'esterno sono accessibili con questo all'interno di una funzione freccia. Sono utili per la sintassi piรน breve, cosรฌ come per callback, gestori di eventi e funzioni di temporizzazione.

TypeScript Enums

A TypeScript Un enum รจ un oggetto che contiene una raccolta di valori correlati memorizzati insieme. JavaLo script non supporta nativamente gli enum. La maggior parte dei linguaggi di programmazione come Java, C, e C++ supportare enumerazioni e TypeScript li rende disponibili anche. Gli enum vengono definiti utilizzando la parola chiave enum.

Come dichiarare un Enum?

Sintassi:

enum NameofEnum {
   value1,
   value2,
    ..
}

Esempio: Enum

enum Directions {
    North,
    South,
    East,
    West
}

Nell'esempio precedente, hai definito un'enumerazione chiamata Directions con i valori North, South, East e West. I valori sono numerati a partire da 0 per la prima voce e aumentano di 1 per ogni voce successiva.

Dichiarare un Enum con un valore numerico

Per impostazione predefinita, se a un membro di un'enumerazione non viene assegnato un valore, assume un numero a partire da 0. L'esempio seguente mostra un'enumerazione con valori numerici espliciti.

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

รˆ inoltre possibile assegnare un valore iniziale, e i membri successivi riceveranno valori incrementali. Ad esempio:

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

Ora il Nord inizia dal numero 5, quindi il Sud รจ il 6, l'Est il 7 e l'Ovest l'8.

รˆ inoltre possibile assegnare valori a propria scelta anzichรฉ utilizzare quelli predefiniti. Ad esempio:

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

Come accedere a un Enum?

L'esempio seguente mostra come utilizzare un'enumerazione nel codice:

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

Il compilato JavaLa sceneggiatura รจ la seguente:

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]);

Dal JavaLo script non supporta le enumerazioni, il compilatore converte l'enumerazione in una funzione auto-invocata, come mostrato sopra. La doppia assegnazione รจ ciรฒ che crea la mappa inversa.ping dal numero al nome.

Dichiarare un Enum con un valore stringa

รˆ possibile assegnare valori stringa a propria scelta, come mostrato nell'esempio seguente.

Esempio:

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

Il compilato JavaLa sceneggiatura รจ la seguente:

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]);

โš ๏ธ Attenzione: Le stringhe enum non hanno una mappa inversaping. Confronta i due output compilati sopra: l'enumerazione numerica memorizza entrambe le direzioni, mentre l'enumerazione stringa memorizza solo la relazione nome-valore. Ecco perchรฉ Directions[0] restituisce undefined per un'enumerazione di stringhe.

In cosa sono contenuti i moduli TypeScript?

File creati in TypeScript hanno accesso globale, il che significa che le variabili dichiarate in un file possono essere accessibili in un altro file. Questa natura globale puรฒ causare conflitti di codice e problemi di runtime. La funzionalitร  di esportazione e importazione del modulo puรฒ essere utilizzata per evitare conflitti di variabili e funzioni globali. Questa funzionalitร  รจ arrivata in JavaScript con la versione ES6 ed รจ supportato anche in TypeScript.

Perchรฉ hai bisogno dei moduli in TypeScript?

L'esempio seguente mostra il problema senza moduli.

Esempio test1.ts

let age : number = 25;

Hai definito un'etร  variabile di tipo numero in test1.ts.

Esempio test2.ts

Nel file test2.ts รจ possibile accedere alla variabile definito in test1.ts e modificarlo come mostrato di seguito:

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

Questo puรฒ creare molti problemi, poichรฉ le variabili sono disponibili a livello globale e possono essere modificate da qualsiasi luogo.

Con moduliIl codice scritto rimane locale al file e non puรฒ essere consultato dall'esterno. Per condividere qualsiasi elemento da un file, รจ necessario esportarlo utilizzando la parola chiave export. Esportare Si usa quando si desidera che una variabile, una classe, una funzione o un'interfaccia vengano utilizzate in un altro file. Importare Si usa quando si desidera accedere a un elemento esportato. In questo modo il codice rimane intatto all'interno del file e, anche se si definiscono gli stessi nomi di variabili, questi non vengono confusi.

Utilizzo di Esporta e Importa

Esistono molti modi per esportare e importare. Analizzeremo la sintassi piรน comunemente utilizzata.

La sintassi per l'importazione e l'esportazione 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"

Ecco un esempio funzionante utilizzando l'esportazione e l'importazione.

prova1.ts

export let age: number = 25;

La parola chiave export viene utilizzata per condividere la variabile etร  con un altro file.

prova2.ts

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

La parola chiave import viene utilizzata per accedere a variabile ed รจ necessario specificare il percorso del file come mostrato sopra.

Sintassi per l'importazione e l'esportazione 2:

Esiste un altro modo per esportare e importare, e la sintassi รจ la seguente:

export = classname;

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

Quando si utilizza esportare = Per esportare il modulo, l'importazione deve utilizzare require("percorso del file del nome del modulo").

Ecco un esempio pratico che illustra questo caso.

Cliente.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;

testCliente.ts

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

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

Caricatore di moduli

I moduli non possono funzionare da soli, quindi รจ necessario un caricatore di moduli per individuare le dipendenze di importazione, come visto in TypeScript Esempi sopra. I caricatori di moduli disponibili sono CommonJS per Node.js e Require.js per l'esecuzione nel browser.

Per compilare il codice utilizzando il formato del modulo CommonJS, utilizzare il seguente comando:

tsc --module commonjs testCustomer.ts

Per compilare il codice utilizzando il formato del modulo Requirejs, utilizzare il seguente comando:

tsc --module amd testCustomer.ts

I file dipendenti verranno convertiti in file js con il comando sopra indicato.

Esempio di conversione da testCustomer.ts a testCustomer.js utilizzando Requirejs

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

Esempio di conversione da Customer.ts a Customer.js utilizzando Requirejs

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

Per testarlo usando require.js, devi creare un file chiamato main.js che faccia riferimento alle dipendenze come mostrato.

Ecco la struttura delle cartelle:

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

principale.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>

Caricatore di moduli

Spazi dei nomi in TypeScript

Un namespace contiene una raccolta di classi, interfacce, variabili e funzioni riunite in un unico file.

Sintassi dello spazio dei nomi

namespace name{

export class {
}

export interface {
}

export const constname;

}

Il codice correlato รจ disponibile in un unico namespace.

Esempio di funzionamento dello spazio dei nomi: testnamespace.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;
        }
    }
}

Il nome dello spazio dei nomi รจ Configurazione dello studentee hai aggiunto un'interfaccia StudDetails, una funzione addSpace e una classe chiamata Student.

Accesso a uno spazio dei nomi

Di seguito รจ riportato il codice in cui si utilizza il namespace Configurazione dello studente.

testStudentSetup.ts

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

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

La classe, l'interfaccia o la funzione disponibile all'interno di un namespace deve essere referenziata utilizzando il nome del namespace, ad esempio StudentSetup.addSpace per accedere alla funzione e StudentSetup.Student per accedere alla lezione.

รˆ possibile compilare entrambi i file in un unico file JavaScript, come mostrato di seguito:

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

Verifica l'output nel prompt dei comandi utilizzando il comando seguente:

node namespace.js

Produzione:

The name is :H a r r y

Dichiarazioni ambientali in TypeScript

TypeScript ti consente di utilizzare terze parti JavaFile di script che utilizzano dichiarazioni ambientali. Il vantaggio di questa funzionalitร  รจ che non รจ necessario riscrivere la libreria, eppure รจ possibile utilizzare tutte le sue funzionalitร  con il controllo dei tipi in TypeScript.

Sintassi ambientale

Per dichiarare un modulo ambientale:

declare module moduleName {
   //code here
}

Il file ambientale deve essere salvato come:

filename.d.ts

Per utilizzare il file nomefile.d.ts Nel tuo file .ts devi farvi riferimento in questo modo:

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

La dichiarazione del tipo ambientale in TypeScript fa riferimento alla libreria di terze parti e ridichiara le funzioni richieste con i propri tipi. Ad esempio, considera il piccolo JavaLa libreria di script รจ mostrata di seguito.

Terzo JavaFile di script: 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();
    }
};

Hai un oggetto chiamato StringChecks che ha le funzioni isString, convertToUpperCase, convertToLowerCase e convertToStringBold.

Creazione di un modulo ambientale in TypeScript

Ora creeremo un modulo ambientale che fa riferimento al JavaLo script esegue le funzioni sopra descritte e aggiunge i controlli di tipo secondo necessitร .

Nome file: 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;

Definisci un modulo chiamato TestString ed esporti l'interfaccia StringsFunc. Ogni firma specifica cosa accetta e cosa restituisce la funzione:

  • isString(str: stringa): booleano โ€“ accetta una stringa e restituisce un valore booleano. Il passaggio di un numero o di qualsiasi altro tipo produce un errore in fase di compilazione.
  • convertToUpperCase(str: stringa): stringa โ€“ prende una stringa e restituisce una stringa.
  • convertToLowerCase(str: stringa): stringa โ€“ prende una stringa e restituisce una stringa.
  • convertToStringBold(str: stringa): stringa โ€“ prende una stringa e restituisce una stringa.

Poichรฉ JavaIl file di script espone il nome dell'oggetto StringChecks, al quale infine facciamo riferimento nel file .d.ts:

declare var StringChecks: TestString.StringsFunc;

Utilizzo di un modulo Ambient in TypeScript

Ecco il file test.ts che utilizza il file ambientale tstring.d.ts.

/// <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);

Compila con tsc test.ts per produrre test.js:

/// <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);

Ora รจ possibile utilizzare test.js in un file HTML insieme al file di libreria testString.js.

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

Produzione:

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

Suggerimento: Per le librerie piรน diffuse raramente รจ necessario scrivere un file .d.ts da soli. Installa invece i tipi gestiti dalla community, ad esempio npm install --save-dev @types/lodashe il compilatore li rileva automaticamente.

Per continuare, confronta direttamente le due lingue in TypeScript vs JavaCopione, rivisitare JavaMetodi degli array di script per gli equivalenti non tipizzati utilizzati qui e studiare cicli in JavaCopione and interno ed esterno JavaCopione per i principi fondamentali del browser su cui si basa l'output compilato.

DOMANDE FREQUENTI

No. Un browser esegue JavaSi tratta di un file script, quindi il file .ts deve essere prima compilato con tsc o un bundler. Le annotazioni di tipo vengono eliminate durante questa fase e non hanno alcun costo in fase di esecuzione.

Sรฌ. Abilita allowJs in tsconfig.json e rinomina i file uno alla volta. Perchรฉ ogni JavaIl file di script รจ giร  valido TypeScriptIl progetto continua a compilarsi durante tutta la migrazione.

Un'interfaccia puรฒ essere riaperta ed estesa ed รจ la scelta usuale per le forme degli oggetti. Un alias di tipo copre anche unioni, tuple e tipi primitivi, che le interfacce non possono esprimere.

Utilizzate i moduli con le funzioni di esportazione e importazione. I namespace sono precedenti ai moduli ES e rimangono utili principalmente per i file di dichiarazione e per le codebase basate su script piรน datate.

Sรฌ, in modo misurabile. Il compilatore rifiuta immediatamente le proprietร  fittizie e i tipi di argomenti errati, quindi il frammento di codice generato esegue un controllo dei tipi o segnala esattamente dove si trova l'errore.

Le integrazioni con gli editor inseriscono i tipi e i file .d.ts circostanti nel contesto del modello. Annotazioni piรน ricche producono quindi completamenti piรน accurati rispetto a un codice con tipizzazione debole.

Riassumi questo post con: