Les classes són una característica fonamental en TypeScript que permeten crear objectes amb propietats i mètodes. Les classes proporcionen una manera de definir estructures de dades complexes i encapsular la lògica relacionada amb aquestes dades. En aquest tema, aprendrem com crear i utilitzar classes en TypeScript.
Continguts
Definició de Classes
Una classe en TypeScript es defineix utilitzant la paraula clau class seguida del nom de la classe. Aquí teniu un exemple bàsic:
class Persona {
nom: string;
edat: number;
constructor(nom: string, edat: number) {
this.nom = nom;
this.edat = edat;
}
saludar() {
console.log(`Hola, em dic ${this.nom} i tinc ${this.edat} anys.`);
}
}
const persona1 = new Persona('Joan', 30);
persona1.saludar(); // Hola, em dic Joan i tinc 30 anys.Explicació
- Definició de la Classe: La classe
Personaté dues propietats (nomiedat) i un mètode (saludar). - Constructor: El constructor és un mètode especial que s'executa quan es crea una nova instància de la classe. En aquest cas, inicialitza les propietats
nomiedat. - Mètode: El mètode
saludarimprimeix un missatge a la consola.
Constructors
El constructor és un mètode especial que s'utilitza per inicialitzar els objectes creats amb una classe. Aquí teniu un exemple més detallat:
class Cotxe {
marca: string;
model: string;
any: number;
constructor(marca: string, model: string, any: number) {
this.marca = marca;
this.model = model;
this.any = any;
}
descripcio() {
return `${this.marca} ${this.model} de l'any ${this.any}`;
}
}
const cotxe1 = new Cotxe('Toyota', 'Corolla', 2020);
console.log(cotxe1.descripcio()); // Toyota Corolla de l'any 2020Explicació
- Propietats:
marca,modelianysón propietats de la classeCotxe. - Constructor: Inicialitza les propietats amb els valors proporcionats quan es crea una nova instància de
Cotxe. - Mètode:
descripcioretorna una cadena que descriu el cotxe.
Propietats i Mètodes
Les propietats són variables que pertanyen a una classe, mentre que els mètodes són funcions que pertanyen a una classe. Aquí teniu un exemple amb més propietats i mètodes:
class Rectangle {
amplada: number;
alçada: number;
constructor(amplada: number, alçada: number) {
this.amplada = amplada;
this.alçada = alçada;
}
area() {
return this.amplada * this.alçada;
}
perimetre() {
return 2 * (this.amplada + this.alçada);
}
}
const rectangle1 = new Rectangle(5, 10);
console.log(`Àrea: ${rectangle1.area()}`); // Àrea: 50
console.log(`Perímetre: ${rectangle1.perimetre()}`); // Perímetre: 30Explicació
- Propietats:
ampladaialçadasón propietats de la classeRectangle. - Mètodes:
areaiperimetresón mètodes que calculen l'àrea i el perímetre del rectangle, respectivament.
Herència
L'herència permet crear una nova classe que hereta les propietats i mètodes d'una altra classe. Aquí teniu un exemple:
class Animal {
nom: string;
constructor(nom: string) {
this.nom = nom;
}
ferSoroll() {
console.log(`${this.nom} fa un soroll.`);
}
}
class Gos extends Animal {
constructor(nom: string) {
super(nom);
}
ferSoroll() {
console.log(`${this.nom} borda.`);
}
}
const gos1 = new Gos('Rex');
gos1.ferSoroll(); // Rex borda.Explicació
- Classe Base:
Animalés la classe base amb una propietatnomi un mètodeferSoroll. - Classe Derivada:
Gosés una classe derivada que hereta deAnimali sobreescriu el mètodeferSoroll.
Modificadors d'Accés
Els modificadors d'accés controlen la visibilitat de les propietats i mètodes d'una classe. Els principals modificadors són public, private i protected.
Public
Les propietats i mètodes public són accessibles des de qualsevol lloc.
class Persona {
public nom: string;
constructor(nom: string) {
this.nom = nom;
}
}
const persona1 = new Persona('Joan');
console.log(persona1.nom); // JoanPrivate
Les propietats i mètodes private només són accessibles dins de la classe on es defineixen.
class Banc {
private saldo: number;
constructor(saldo: number) {
this.saldo = saldo;
}
mostrarSaldo() {
console.log(`El saldo és ${this.saldo} euros.`);
}
}
const compte = new Banc(1000);
compte.mostrarSaldo(); // El saldo és 1000 euros.
// console.log(compte.saldo); // Error: Property 'saldo' is private and only accessible within class 'Banc'.Protected
Les propietats i mètodes protected són accessibles dins de la classe on es defineixen i en les classes derivades.
class Empleat {
protected salari: number;
constructor(salari: number) {
this.salari = salari;
}
}
class Manager extends Empleat {
mostrarSalari() {
console.log(`El salari és ${this.salari} euros.`);
}
}
const manager = new Manager(5000);
manager.mostrarSalari(); // El salari és 5000 euros.Classes Abstractes
Les classes abstractes no es poden instanciar directament i sovint contenen mètodes abstractes que han de ser implementats per les classes derivades.
abstract class Figura {
abstract area(): number;
descripcio() {
console.log('Aquesta és una figura.');
}
}
class Cercle extends Figura {
radi: number;
constructor(radi: number) {
super();
this.radi = radi;
}
area() {
return Math.PI * this.radi * this.radi;
}
}
const cercle = new Cercle(5);
console.log(`Àrea del cercle: ${cercle.area()}`); // Àrea del cercle: 78.53981633974483
cercle.descripcio(); // Aquesta és una figura.Explicació
- Classe Abstracta:
Figuraés una classe abstracta amb un mètode abstracteareai un mètode concretdescripcio. - Classe Derivada:
Cercleés una classe derivada que implementa el mètodearea.
Exercicis Pràctics
Exercici 1
Crea una classe Llibre amb les propietats titol, autor i anyPublicacio. Afegeix un mètode descripcio que retorni una cadena amb la descripció del llibre.
class Llibre {
titol: string;
autor: string;
anyPublicacio: number;
constructor(titol: string, autor: string, anyPublicacio: number) {
this.titol = titol;
this.autor = autor;
this.anyPublicacio = anyPublicacio;
}
descripcio() {
return `${this.titol} escrit per ${this.autor} l'any ${this.anyPublicacio}`;
}
}
const llibre1 = new Llibre('El Quixot', 'Miguel de Cervantes', 1605);
console.log(llibre1.descripcio()); // El Quixot escrit per Miguel de Cervantes l'any 1605Exercici 2
Crea una classe CompteBancari amb les propietats numeroCompte i saldo. Afegeix mètodes per depositar i retirar diners, i un mètode mostrarSaldo que imprimeixi el saldo actual.
class CompteBancari {
numeroCompte: string;
saldo: number;
constructor(numeroCompte: string, saldo: number) {
this.numeroCompte = numeroCompte;
this.saldo = saldo;
}
depositar(import: number) {
this.saldo += import;
}
retirar(import: number) {
if (import <= this.saldo) {
this.saldo -= import;
} else {
console.log('Saldo insuficient.');
}
}
mostrarSaldo() {
console.log(`El saldo del compte ${this.numeroCompte} és ${this.saldo} euros.`);
}
}
const compte1 = new CompteBancari('123456789', 500);
compte1.depositar(200);
compte1.mostrarSaldo(); // El saldo del compte 123456789 és 700 euros.
compte1.retirar(100);
compte1.mostrarSaldo(); // El saldo del compte 123456789 és 600 euros.
compte1.retirar(700); // Saldo insuficient.Conclusió
En aquesta secció, hem après com crear i utilitzar classes en TypeScript. Hem vist com definir propietats i mètodes, utilitzar constructors, aplicar herència, i utilitzar modificadors d'accés. També hem explorat les classes abstractes i hem practicat amb alguns exercicis. Amb aquests coneixements, estàs preparat per crear estructures de dades més complexes i organitzar millor el teu codi en TypeScript.
Curs de TypeScript
Mòdul 1: Introducció a TypeScript
- Què és TypeScript?
- Configuració de l'entorn de TypeScript
- Tipus bàsics
- Anotacions de tipus
- Compilació de TypeScript
Mòdul 2: Treballant amb Tipus
Mòdul 3: Tipus Avançats
Mòdul 4: Funcions i Mòduls
- Tipus de Funció
- Paràmetres Opcional i per Defecte
- Paràmetres Rest
- Mòduls i Espais de Noms
- Decoradors
Mòdul 5: Programació Asíncrona
Mòdul 6: Eines i Millors Pràctiques
- Linting i Formatació
- Proves de Codi TypeScript
- TypeScript amb Webpack
- TypeScript amb React
- Millors Pràctiques
