Sobes.tech
Middle

Kedy by ste mali v TypeScript používať typy a kedy rozhrania?

sobes.tech AI

Odpoveď od AI

Typy (type) by sa mali používať na:

  • Unions (sjednotenia) a intersections (prieniky):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Primitívne typy a literály:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • Tuply (tuples):
    type RgbColor = [number, number, number];
    
  • Vytváranie aliasov pre existujúce typy:
    type StringOrNumber = string | number;
    
  • Podmienkové typy (conditional types):
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Rozhrania (interface) by sa mali používať na:

  • Popis štruktúry objektov:
    interface User {
      id: number;
      name: string;
      age?: number; // voliteľná vlastnosť
    }
    
  • Implementácia triedami (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Rozšírenie iných rozhraní (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Deklaratívne zlúčenie (declaration merging): Toto umožňuje rozšíriť existujúce rozhranie jeho opakovaným vyhlásením. S typmi to nie je možné.
    interface Box {
      width: number;
    }
    
    interface Box { // Toto pridá vlastnosť height k rozhraniu Box
      height: number;
    }
    

Stručné porovnanie:

Vlastnosť type interface
Union typy Áno Nie
Intersection typy Áno Nie
Primitívne typy/literály Áno Nie
Tuply Áno Nie
Aliasy typov Áno Nie
Podmienkové typy Áno Nie
Popis objektov Áno Áno
Implementácia triedami Nie Áno
Rozšírenie Áno (&) Áno (extends)
Deklaratívne zlúčenie Nie Áno

Vo všeobecnosti je vhodnejšie použiť interface na opis štruktúry objektov, pretože lepšie zodpovedá objektovo orientovanému prístupu a podporuje deklaratívne zlúčenie. Na všetko ostatné, najmä na kombinácie a tvorbu nových typov z existujúcich, je flexibilnejší type.