Middle
Kad jālieto tipi un kad interfeisi TypeScript?
sobes.tech AI
Atbilde no AI
Veidi (type) jāizmanto:
- Apvienojumiem (unions) un krusto (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Primitīviem tipiem un literāļiem:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Tupļiem (tuples):
type RgbColor = [number, number, number]; - Esošo tipu aliasu izveide:
type StringOrNumber = string | number; - Nosacījuma tipi (conditional types):
type TypeOfProp<T, K extends keyof T> = T[K];
Interfeisi (interface) jāizmanto:
- Objektu struktūras aprakstīšanai:
interface User { id: number; name: string; age?: number; // opcija } - Klases realizācijai (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Citu interfeisu paplašināšanai (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Deklaratīva apvienošana (declaration merging): Tas ļauj paplašināt esošo interfeisu, to atkārtoti deklarējot. Ar tipiem tas nav iespējams.
interface Box { width: number; } interface Box { // Tas pievienos height īpašību interfeisam Box height: number; }
Īss salīdzinājums:
| Īpašība | type |
interface |
|---|---|---|
| Apvienojumi (unions) | Jā | Nē |
| Krusto (intersections) | Jā | Nē |
| Primārie tipi/literāli | Jā | Nē |
| Tupļi (tuples) | Jā | Nē |
| Aliasi (aliases) | Jā | Nē |
| Nosacījuma tipi | Jā | Nē |
| Objekta apraksts | Jā | Jā |
| Klases realizācija | Nē | Jā |
| Paplašināšana (extends) | Jā (& izmantošana) |
Jā (extends izmantošana) |
| Deklaratīva apvienošana | Nē | Jā |
Kopumā, objektu struktūras aprakstīšanai ir labāk izmantot interface, jo tas ir piemērotāks objektu orientētai pieejai un atbalsta deklaratīvu apvienošanos. Visos citos gadījumos, īpaši kombinācijās un esošo tipu apvienošanā, type ir elastīgāks.