Definizione e utilizzo delle classi di TypeScript

Le classi di TypeScript sono uno strumento chiaro e strutturato per organizzare i dati e i comportamenti in un oggetto. In questo modo puoi modellare più facilmente le entità e i concetti nel tuo codice.

A cosa servono le classi di TypeScript?

Le classi sono un concetto chiave del linguaggio di programmazione TypeScript, che si basa su JavaScript. Costituiscono un metodo strutturato per la definizione di oggetti e per l’applicazione della programmazione orientata agli oggetti (OOP). Queste classi ricordano i progetti per la costruzione di oggetti che raccolgono in modo logico i dati e i metodi che sono in correlazione logica fra loro.

TypeScript contiene tutte le funzioni di JavaScript e, in aggiunta, la tipizzazione statica. In questo modo è possibile indicare tipi di dati per le funzioni di TypeScript, variabili e classi al fine di rilevare gli errori in fase di compilazione. Oltre alla sicurezza rispetto al tipo, le classi di TypeScript supportano anche concetti come l’ereditarietà e l’astrazione, che agevolano lo sviluppo di applicazioni complesse.

Le classi di TypeScript ti permettono di realizzare una gerarchia chiara delle classi che ereditano proprietà e metodi. Questa possibilità va a vantaggio del riutilizzo del codice e della strutturazione. I costruttori nelle classi permettono inoltre di inizializzare le istanze e garantire la coerenza nella creazione degli oggetti.

La sintassi delle classi di TypeScript

La scrittura di classi di TypeScript è simile a quella di ECMAScript 6 (ES6) ed è una versione estesa della sintassi delle classi di JavaScript. Una classe in TypeScript può contenere diversi elementi per definire la struttura e il comportamento di oggetti. I componenti principali e fondamentali sono:

  • Proprietà
  • Costruttore
  • Metodi

Proprietà

Le proprietà (Properties) determinano lo stato di un oggetto. Memorizzano i valori dei dati e possono contenere annotazioni dei tipi di dati in modo che presentino solo valori validi.

class ClassName {
    propertyName: propertyType;
}
typescript
  • ClassName: il nome della classe
  • propertyName: il nome della proprietà che desideri definire
  • propertyType: il tipo di dati della proprietà

Un esempio pratico:

class Person {
    name: string;
}
typescript

Per prima cosa, definiamo una classe Person con una proprietà name del tipo string. Questo significa che le istanze della classe Person hanno una proprietà name in cui sono memorizzate catene di caratteri (stringhe).

Costruttore

Il costruttore in TypeScript è un metodo speciale che viene richiamato quando si crea un’istanza (un oggetto) di una classe. È necessario per eseguire l’inizializzazione delle proprietà di un oggetto. Questo componente definisce essenzialmente lo stato iniziale di un’istanza. Nel costruttore è possibile indicare dei parametri per trasmettere valori in fase di istanziazione delle classi di TypeScript.

La sintassi fondamentale di un costruttore in TypeScript è la seguente:

class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
typescript
  • constructor: ogni classe può avere un singolo costruttore. Se non è definito nessun costruttore, ne viene creato uno vuoto per impostazione predefinita.
  • parameter: Type: i parametri sono opzionali e dipendono dalla classe e dai suoi requisiti. I parametri devono essere caratterizzati dai rispettivi tipi di dati.

Un esempio di costruttore:

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
typescript

Nel nostro esempio, la classe Person presenta un costruttore che accetta due parametri firstName e lastName. Al momento della creazione di un’istanza di questa classe, vengono assegnati questi parametri e il costruttore inizializza le proprietà firstName e lastName dell’istanza con i valori corrispondenti. La parola chiave this si riferisce all’attuale istanza della classe sulla quale viene eseguito il codice.

Metodi

In TypeScript i metodi sono funzioni definite in classi e sulle quali è possibile applicare delle istanze. I metodi ti permettono di eseguire determinate azioni o operazioni nel contesto di una classe.

class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
typescript
  • methodName: nome del metodo.
  • parameter: Type: parametri opzionali accettati dal metodo.
  • ReturnType: il tipo di dati che determina il valore restituito dal metodo. Se il metodo non restituisce nessun valore, puoi indicare void.

Per accedere a una proprietà o per richiamare un metodo su un’istanza di una classe, utilizza l’operatore punto ., seguito dal nome del metodo e dagli argomenti necessari, nel caso in cui il metodo preveda dei parametri.

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return this.firstName + " " + this.lastName;
    }
}
const person = new Person("John", "Doe");
const fullName = person.getFullName();
typescript

Il metodo getFullName serve a creare il nome completo della persona e a restituirlo. Accede ai valori delle proprietà firstName e lastName, che sono stati definiti nella classe e inizializzati nel costruttore. L’oggetto person è creato per mezzo della parola chiave new seguita dal nome della classe e dai rispettivi parametri. Il metodo concatena le due catene di caratteri una volta richiamato e restituisce il nome completo sotto forma di stringa. L’output per l’oggetto person è quindi “John Doe”.

Esempi di applicazione delle classi di TypeScript

Le classi di TypeScript dispongono di diversi meccanismi per organizzare e controllare la struttura e il comportamento degli oggetti. Nelle parti seguenti ti mostriamo alcuni concetti per l’utilizzo delle classi di TypeScript.

Visibilità

La visibilità nelle classi di TypeScript regola l’accesso alle proprietà e ai metodi all’interno e all’esterno della classe. TypeScript offre tre modificatori della visibilità: public, private e protected.

  • public (standard): le proprietà e i metodi caratterizzati da public possono essere richiamati da ogni posizione, sia all’interno che all’esterno della classe.

  • private: private si riferisce a proprietà e metodi che possono essere richiamati solo all’interno della classe stessa. Sono inaccessibili per le parti di codice esterne.

  • protected: le proprietà e i metodi caratterizzati da protected possono essere richiamati dalla classe stessa e da classi derivate (nell’ereditarietà), ma non da codice esterno.

class Person {
    private socialSecurityNumber: string;
    constructor(ssn: string) {
        this.socialSecurityNumber = ssn;
    }
    greet() {
        console.log("Hello, I am a person with SSN: " + this.socialSecurityNumber);
    }
}
const person = new Person("123-45-6789");
person.greet();
typescript

In questo esempio, socialSecurityNumber è una proprietà privata alla quale è possibile accedere solo all’interno della classe Person. È comunque possibile richiamare il metodo greet dall’esterno.

Ereditarietà

L’ereditarietà è un concetto fondamentale della programmazione orientata agli oggetti (OOP), utilizzata in TypeScript e in molti altri linguaggi di programmazione web. Permette la creazione di una nuova classe partendo da una classe base o da una superclasse già esistenti. La classe derivata (sottoclasse) eredita quindi le proprietà e i metodi della classe base e può espanderli o adattarli.

class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound() {
        console.log("Some generic sound");
    }
}
class Dog extends Animal {
    makeSound() {
        console.log(this.name + " barks");
    }
}
const myDog = new Dog("Buddy");
myDog.makeSound();
typescript

In questo caso, la classe Dog eredita dalla classe base Animal tramite la parola chiave extends. La classe derivata Dog sovrascrive il metodo makeSound per aggiungere un comportamento specifico mentre acquisisce la proprietà name da Animal.

Readonly

La parola chiave readonly è utilizzabile per dichiarare come protette da scrittura le proprietà delle classi di TypeScript o degli oggetti. In pratica non è più possibile cambiare il valore di una proprietà protetta da scrittura dopo la sua inizializzazione.

class Circle {
    readonly pi: number = 3.14159;
    radius: number;
    constructor(radius: number) {
        this.radius = radius;
    }
    getArea() {
        return this.pi    *this.radius*    this.radius;
    }
}
const myCircle = new Circle(5);
console.log(myCircle.getArea()); // Output: ≈ 78,54
typescript

Nel nostro esempio, la proprietà pi è protetta da scrittura ed è inizializzata nel costruttore. Dopo l’inizializzazione non è più possibile cambiare pi. Tentando di modificare il valore di pi dopo l’inizializzazione, TypeScript genera un errore di compilazione.

Registra il tuo dominio
  • Certificato SSL Wildcard incluso
  • Registrazione di dominio sicura
  • Indirizzo e-mail professionale da 2 GB
Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top