Sobes.tech
Middle

Wanneer moet je types en wanneer interfaces gebruiken in TypeScript?

sobes.tech AI

Antwoord van AI

Types (type) moeten worden gebruikt voor:

  • Unies (unions) en intersecties (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Primitieve types en literals:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • Tuples:
    type RgbColor = [number, number, number];
    
  • Aanmaken van aliasen voor bestaande types:
    type StringOrNumber = string | number;
    
  • Voorwaardelijke types:
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Interfaces (interface) moeten worden gebruikt voor:

  • Omschrijving van de structuur van objecten:
    interface User {
      id: number;
      name: string;
      age?: number; // Optionele eigenschap
    }
    
  • Implementatie door klassen (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Uitbreiding van andere interfaces (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Declaratief samenvoegen (declaration merging): Dit stelt je in staat om een bestaande interface uit te breiden door deze opnieuw te declareren. Bij types is dit niet mogelijk.
    interface Box {
      width: number;
    }
    
    interface Box { // Dit voegt de property height toe aan de interface Box
      height: number;
    }
    

Kort overzicht:

Eigenschap type interface
Unietypes Ja Nee
Intersectietypes Ja Nee
Primitieve types/literals Ja Nee
Tuples Ja Nee
Alias voor types Ja Nee
Voorwaardelijke types Ja Nee
Objectbeschrijving Ja Ja
Implementatie met klassen Nee Ja
Uitbreiding Ja (met &) Ja (met extends)
Declaratief samenvoegen Nee Ja

Over het algemeen is het beter om interface te gebruiken voor het beschrijven van objectstructuren, omdat ze beter passen bij de objectgeoriënteerde aanpak en declaratief samenvoegen ondersteunen. Voor alles wat anders is, vooral voor combinaties en het maken van nieuwe types uit bestaande types, is type flexibeler.