Sobes.tech
Middle

Kad jālieto tipi un kad interfeisi TypeScript?

sobes.tech AI

Atbilde no AI

Veidi (type) jāizmanto:

  • Apvienojumiem (unions) un krusto (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Primitīviem tipiem un literāļiem:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • Tupļiem (tuples):
    type RgbColor = [number, number, number];
    
  • Esošo tipu aliasu izveide:
    type StringOrNumber = string | number;
    
  • Nosacījuma tipi (conditional types):
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Interfeisi (interface) jāizmanto:

  • Objektu struktūras aprakstīšanai:
    interface User {
      id: number;
      name: string;
      age?: number; // opcija
    }
    
  • Klases realizācijai (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Citu interfeisu paplašināšanai (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Deklaratīva apvienošana (declaration merging): Tas ļauj paplašināt esošo interfeisu, to atkārtoti deklarējot. Ar tipiem tas nav iespējams.
    interface Box {
      width: number;
    }
    
    interface Box { // Tas pievienos height īpašību interfeisam Box
      height: number;
    }
    

Īss salīdzinājums:

Īpašība type interface
Apvienojumi (unions)
Krusto (intersections)
Primārie tipi/literāli
Tupļi (tuples)
Aliasi (aliases)
Nosacījuma tipi
Objekta apraksts
Klases realizācija
Paplašināšana (extends) Jā (& izmantošana) Jā (extends izmantošana)
Deklaratīva apvienošana

Kopumā, objektu struktūras aprakstīšanai ir labāk izmantot interface, jo tas ir piemērotāks objektu orientētai pieejai un atbalsta deklaratīvu apvienošanos. Visos citos gadījumos, īpaši kombinācijās un esošo tipu apvienošanā, type ir elastīgāks.