Sobes.tech
Middle

Millal kasutada tüüpe ja millal liideseid TypeScriptis?

sobes.tech AI

Vastus AI-lt

Tüübid (type) tuleks kasutada:

  • Liitumised (unions) ja ristumised (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Primitiivsed tüübid ja literaalid:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • Tupplid (tuples):
    type RgbColor = [number, number, number];
    
  • Olemasolevate tüüpide aliased loomine:
    type StringOrNumber = string | number;
    
  • Tingimuslikud tüübid (conditional types):
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Liideseid (interface) tuleks kasutada:

  • Objektide struktuuri kirjeldamiseks:
    interface User {
      id: number;
      name: string;
      age?: number; // valikuline omadus
    }
    
  • Klasside rakendamiseks (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Muude liideste laiendamiseks (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Deklaratiivne ühendamine (declaration merging): See võimaldab laiendada olemasolevat liidest, seda uuesti deklareerides. Tüüpide puhul see ei ole võimalik.
    interface Box {
      width: number;
    }
    
    interface Box { // See lisab Box liidesele height omaduse
      height: number;
    }
    

Kokkuvõte:

Omadus type interface
Liitumised (unions) Jah Ei
Ristumised (intersections) Jah Ei
Primitiivsed tüübid/literaalid Jah Ei
Tupplid (tuples) Jah Ei
Aliased (aliased) Jah Ei
Tingimuslikud tüübid Jah Ei
Objekti kirjeldus Jah Jah
Klasside rakendamine Ei Jah
Laiendamine (extends) Jah (& kasutamine) Jah (extends kasutamine)
Deklaratiivne ühendamine Ei Jah

Üldiselt, objektide struktuuri kirjeldamiseks on parem kasutada interface, kuna see sobib paremini objektipõhisele lähenemisele ja toetab deklaratiivset ühendamist. Kõikide teiste puhul, eriti kombinatsioonide ja olemasolevatest tüüpide ühendamisel, on type paindlikum.