Middle
Mikor kell típusokat és mikor interfészeket használni TypeScript-ben?
sobes.tech MI
Válasz az MI-től
A (type) típusokat arra kell használni:
- Uniók (unions) és metszetek (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Primitív típusok és literálok:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Tuple típusok:
type RgbColor = [number, number, number]; - Aliasok létrehozása meglévő típusokhoz:
type StringOrNumber = string | number; - Feltételes típusok (conditional types):
type TypeOfProp<T, K extends keyof T> = T[K];
Az interfészek (interface) használata javasolt:
- Objektumstruktúrák leírására:
interface User { id: number; name: string; age?: number; // opcionális tulajdonság } - Osztályok implementálására (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Más interfészek kiterjesztése (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Deklaratív összefésülés (declaration merging): Ez lehetővé teszi egy meglévő interfész bővítését újra történő deklarálásával. Típusok esetében ez nem lehetséges.
interface Box { width: number; } interface Box { // Ez hozzáadja a height tulajdonságot a Box interfészhez height: number; }
Rövid összehasonlítás:
| Jellemző | type |
interface |
|---|---|---|
| Unió típusok | Igen | Nem |
| Metszet típusok | Igen | Nem |
| Primitív típusok/literálok | Igen | Nem |
| Tuple típusok | Igen | Nem |
| Aliasok típusok | Igen | Nem |
| Feltételes típusok | Igen | Nem |
| Objektum leírása | Igen | Igen |
| Osztályok implementálása | Nem | Igen |
| Kiterjesztés | Igen (& használatával) |
Igen (extends használatával) |
| Deklaratív összefésülés | Nem | Igen |
Általánosságban, az objektumstruktúrák leírására az interface a jobb választás, mivel jobban illeszkedik az objektum-orientált megközelítéshez és támogatja a deklaratív összefésülést. Minden más esetben, különösen a típusok kombinálására és meglévő típusokból új típusok létrehozására, a type rugalmasabb.