Salt la conținutul principal
Modulul 2 · Lecția 1 din 23/14 în curs~12 min
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.

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

TS
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:

TS
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 (&):

TS
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:

TS
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

Exercițiu#ts.m2.l1.e1
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#ts.m2.l1.e2
Încercări: 0Se încarcă…

Creați un alias de tip numit Point2D reprezentând un punct bidimensional cu coordonatele x și y (ambele numere).

Se încarcă editorul...
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

Exercițiu#ts.m2.l1.e3
Încercări: 0Se încarcă…

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

Se încarcă editorul...
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

Exercițiu#ts.m2.l1.e4
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
Afișează indiciu

Utilizați tipul de sintaxă ServerConfig = { gazdă: șir; port: număr; useHttps?: boolean; }.

Soluție disponibilă după 3 încercări