Sobes.tech
Middle

როდის უნდა გამოიყენოთ ტიპები და როდის ინტერფეისები TypeScript-ში?

sobes.tech AI

პასუხი AI-სგან

ტიპები (type) უნდა გამოიყენოს:

  • ერთიანობები (unions) და ინტერსექციები (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • პრიმიტიული ტიპები და ლიტერალები:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • ტუპლები (tuples):
    type RgbColor = [number, number, number];
    
  • არსებული ტიპების ალისების შექმნა:
    type StringOrNumber = string | number;
    
  • შესაბამისი ტიპები (conditional types):
    type TypeOfProp<T, K extends keyof T> = T[K];
    

ინტერფეისები (interface) უნდა გამოიყენოს:

  • ობიექტების სტრუქტურის აღწერა:
    interface User {
      id: number;
      name: string;
      age?: number; // არჩევითი მახასიათებელი
    }
    
  • კლასებით განხორციელება (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • სხვა ინტერფეისების გაფართოება (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • დეკლარატიული შერწყმა (declaration merging): ეს საშუალებას აძლევს გაფართოვდეს არსებული ინტერფეისი მისი განმეორებითი გამოცხადებით. ტიპებისთვის ეს შეუძლებელია.
    interface Box {
      width: number;
    }
    
    interface Box { // ეს დაამატებს height თვისებას Box-კი
      height: number;
    }
    

საკლულაციო შედარება:

მახასიათებელი type interface
ერთიანობები (unions) დიახ არა
ინტერსექციები (intersections) დიახ არა
პრიმიტიული ტიპები/ლიტერალები დიახ არა
ტუპლები (tuples) დიახ არა
ალისები (aliases) დიახ არა
პირობები (conditional) დიახ არა
ობიექტების აღწერა დიახ დიახ
კლასებით განხორციელება არა დიახ
გაფართოება (extends) დიახ (& გამოყენებით) დიახ (extends გამოყენებით)
დეკლარატიული შერწყმა არა დიახ

საერთო ჯამში, ობიექტების სტრუქტურის აღწერისთვის უკეთესია გამოიყენოთ interface, რადგან ის უკეთესად ეწოდება ობიექტ-ორგანიზებულ მიდგომას და მხარს უჭერს დეკლარატიულ შერწყმას. დანარჩენისთვის, განსაკუთრებით კომბინაციების და არსებული ტიპებისგან ახალი ტიპების შექმნისთვის, type უფრო მოქნილია.