Lecții din modul (1/2)
Tip Alias vs Interfețe
În TypeScript, putem defini structura obiectelor complexe în două moduri principale: folosind Interfețe (interface) sau Type Aliases (type). Ambele servesc pentru a descrie „forma” unui obiect sau a unei structuri de date, dar au câteva diferențe fundamentale.
Interfețe (interface)
O interfață definește un contract pentru structura unui obiect. Este instrumentul standard pentru a descrie formele obiectelor și API-urile publice într-un mod extensibil.
interface Book {
title: string;
pages: number;
author?: string; // Optional property (can be omitted)
}
const myBook: Book = {
title: 'The Lord of the Rings',
pages: 1200,
};Semnul întrebării (?) marchează o proprietate ca opțional. Obiectul myBook este valid chiar dacă omite proprietatea author.
Aliasuri de tip (type)
Un alias de tip vă permite să asociați un nume nou cu orice tip existent, inclusiv tipuri primitive, uniuni, tupluri sau structuri de obiecte întregi.
type Point = {
x: number;
y: number;
};
const coordinates: Point = { x: 10, y: 20 };Diferențele cheie: extinderea și fuziunea declarației
Deși interface și type sunt interschimbabile pentru majoritatea cazurilor de utilizare obișnuite, ele prezintă două diferențe critice:
1. Extensibilitate (moștenire)
Interfețele sunt extinse folosind cuvântul cheie extends:
interface User {
username: string;
}
interface Admin extends User {
privileges: string[];
}Aliasurile de tip nu pot fi extinse folosind extends, dar pot fi combinate folosind operatorul intersecție (&):
type User = {
username: string;
};
type Admin = User & {
privileges: string[];
};2. Fuziunea declarației
Mai multe interfețe cu același nume în același domeniu sunt fuzionate automat de compilator:
interface User {
name: string;
}
interface User {
email: string;
}
// Now User has both 'name' and 'email'!Acest comportament nu este acceptat de aliasuri de tip: declararea aceluiași type de două ori va declanșa o eroare de compilare.
Încercați-l singur
Exercițiul 1: Interfața cu utilizatorul
Definiți o interfață numită User care descrie un obiect utilizator. Interfața trebuie să conțină: id ca număr, numele de utilizator ca șir și e-mail ca șir opțional.
Afișează indiciu
Utilizați șirul de e-mail de sintaxă?: pentru a-l marca ca opțional.
Soluție disponibilă după 3 încercări
Exercițiul 2: Alias tip Point2D
Creați un alias de tip numit Point2D reprezentând un punct bidimensional cu coordonatele x și y (ambele numere).
Afișează indiciu
Utilizați tipul de sintaxă Point2D = { x: număr; y: număr; };
Soluție disponibilă după 3 încercări
Exercițiul 3: Extinderea interfețelor
Definiți o interfață numită Product cu id (număr) și preț (număr). Apoi, definiți o interfață numită DiscountedProduct care extinde Produsul și adaugă o proprietate opțională numită discountCode (șir).
Afișează indiciu
Utilizați extinde Produsul pentru a moșteni câmpurile și adăugați discountCode?: șir.
Soluție disponibilă după 3 încercări
Exercițiul 4: Configurarea serverului
Definiți un alias de tip numit ServerConfig reprezentând un obiect de configurare pentru un server. Trebuie să conțină: gazdă (șir), port (număr) și useHttps ca câmp boolean opțional.
Afișează indiciu
Utilizați tipul de sintaxă ServerConfig = { gazdă: șir; port: număr; useHttps?: boolean; }.
Soluție disponibilă după 3 încercări