Middle
Când ar trebui să folosiți tipuri și când interfețe în TypeScript?
sobes.tech AI
Răspuns de la AI
Tipurile (type) trebuie utilizate pentru:
- Uniuni (unions) și intersecții (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Tipuri primitive și literale:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Tupluri:
type RgbColor = [number, number, number]; - Crearea de aliasuri pentru tipuri existente:
type StringOrNumber = string | number; - Tipuri condiționale:
type TypeOfProp<T, K extends keyof T> = T[K];
Interfețele (interface) trebuie utilizate pentru:
- Descrierea structurii obiectelor:
interface User { id: number; name: string; age?: number; // Proprietate opțională } - Implementarea prin clase (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Extinderea altor interfețe (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Fuziunea declarativă (declaration merging): Acest lucru permite extinderea unei interfețe existente declarând-o din nou. Cu tipurile, acest lucru nu este posibil.
interface Box { width: number; } interface Box { // Acest lucru va adăuga proprietatea height la interfața Box height: number; }
Rezumat comparativ:
| Caracteristică | type |
interface |
|---|---|---|
| Tipuri unione | Da | Nu |
| Tipuri intersecție | Da | Nu |
| Tipuri primitive/litereale | Da | Nu |
| Tuples | Da | Nu |
| Alias-uri de tipuri | Da | Nu |
| Tipuri condiționale | Da | Nu |
| Descrierea obiectelor | Da | Da |
| Implementarea cu clase | Nu | Da |
| Extindere | Da (cu &) |
Da (cu extends) |
| Fuziune declarativă | Nu | Da |
În general, pentru descrierea structurii obiectelor, este preferabil să folosiți interface, deoarece se potrivește mai bine abordării orientate pe obiect și suportă fuziunea declarativă. Pentru toate celelalte, în special pentru combinații și crearea de noi tipuri din cele existente, type este mai flexibil.