Sobes.tech
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.