Sobes.tech
Middle

Mikor kell típusokat és mikor interfészeket használni TypeScript-ben?

sobes.tech MI

Válasz az MI-től

A (type) típusokat arra kell használni:

  • Uniók (unions) és metszetek (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Primitív típusok és literálok:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • Tuple típusok:
    type RgbColor = [number, number, number];
    
  • Aliasok létrehozása meglévő típusokhoz:
    type StringOrNumber = string | number;
    
  • Feltételes típusok (conditional types):
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Az interfészek (interface) használata javasolt:

  • Objektumstruktúrák leírására:
    interface User {
      id: number;
      name: string;
      age?: number; // opcionális tulajdonság
    }
    
  • Osztályok implementálására (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Más interfészek kiterjesztése (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Deklaratív összefésülés (declaration merging): Ez lehetővé teszi egy meglévő interfész bővítését újra történő deklarálásával. Típusok esetében ez nem lehetséges.
    interface Box {
      width: number;
    }
    
    interface Box { // Ez hozzáadja a height tulajdonságot a Box interfészhez
      height: number;
    }
    

Rövid összehasonlítás:

Jellemző type interface
Unió típusok Igen Nem
Metszet típusok Igen Nem
Primitív típusok/literálok Igen Nem
Tuple típusok Igen Nem
Aliasok típusok Igen Nem
Feltételes típusok Igen Nem
Objektum leírása Igen Igen
Osztályok implementálása Nem Igen
Kiterjesztés Igen (& használatával) Igen (extends használatával)
Deklaratív összefésülés Nem Igen

Általánosságban, az objektumstruktúrák leírására az interface a jobb választás, mivel jobban illeszkedik az objektum-orientált megközelítéshez és támogatja a deklaratív összefésülést. Minden más esetben, különösen a típusok kombinálására és meglévő típusokból új típusok létrehozására, a type rugalmasabb.