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 ավելի ճկուն է։