Sobes.tech
Middle

Kada naudoti tipus, o kada interfeisus TypeScript?

sobes.tech AI

Atsakymas iš AI

Tipai (type) turėtų būti naudojami:

  • Sąjungos (unions) ir sankirtos (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Primitives ir literaliai tipai:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • ** Tūteliai (tuples):**
    type RgbColor = [number, number, number];
    
  • Sukurti aliasus esamiems tipams:
    type StringOrNumber = string | number;
    
  • Sąlyginiai tipai (conditional types):
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Interfeisai (interface) turėtų būti naudojami:

  • Objektų struktūros aprašymui:
    interface User {
      id: number;
      name: string;
      age?: number; // pasirenkamas savybė
    }
    
  • Klasės įgyvendinimui (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Kitų interfeisų plėtimui (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Deklaratyvus susiliejimas (declaration merging): Tai leidžia išplėsti esamą interfeisą jį pakartotinai deklaruojant. Su tipais tai neįmanoma.
    interface Box {
      width: number;
    }
    
    interface Box { // Tai pridės height savybę prie Box interfeiso
      height: number;
    }
    

Trumpas palyginimas:

Savybė type interface
Sąjungos (unions) Taip Ne
Sankirtos (intersections) Taip Ne
Primitives ir literaliai Taip Ne
Tūteliai (tuples) Taip Ne
Aliasai (aliases) Taip Ne
Sąlyginiai tipai Taip Ne
Objekto aprašymas Taip Taip
Klasės įgyvendinimas Ne Taip
Plėtimas (extends) Taip (& naudojant) Taip (extends naudojant)
Deklaratyvus susiliejimas Ne Taip

Apskritai, objektų struktūros aprašymui geriau naudoti interface, nes jie geriau tinka objektų orientuotam požiūriui ir palaiko deklaratyvų susiliejimą. Visais kitais atvejais, ypač kombinacijoms ir esamų tipų sukurti naujus tipus, type yra lankstesnis.