Middle
Kada naudoti tipus, o kada interfeisus TypeScript?
sobes.tech AI
Atsakymas iš AI
Tipai (type) turėtų būti naudojami:
- Sąjungos (unions) ir sankirtos (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Primitives ir literaliai tipai:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - ** Tūteliai (tuples):**
type RgbColor = [number, number, number]; - Sukurti aliasus esamiems tipams:
type StringOrNumber = string | number; - Sąlyginiai tipai (conditional types):
type TypeOfProp<T, K extends keyof T> = T[K];
Interfeisai (interface) turėtų būti naudojami:
- Objektų struktūros aprašymui:
interface User { id: number; name: string; age?: number; // pasirenkamas savybė } - Klasės įgyvendinimui (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Kitų interfeisų plėtimui (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Deklaratyvus susiliejimas (declaration merging): Tai leidžia išplėsti esamą interfeisą jį pakartotinai deklaruojant. Su tipais tai neįmanoma.
interface Box { width: number; } interface Box { // Tai pridės height savybę prie Box interfeiso height: number; }
Trumpas palyginimas:
| Savybė | type |
interface |
|---|---|---|
| Sąjungos (unions) | Taip | Ne |
| Sankirtos (intersections) | Taip | Ne |
| Primitives ir literaliai | Taip | Ne |
| Tūteliai (tuples) | Taip | Ne |
| Aliasai (aliases) | Taip | Ne |
| Sąlyginiai tipai | Taip | Ne |
| Objekto aprašymas | Taip | Taip |
| Klasės įgyvendinimas | Ne | Taip |
| Plėtimas (extends) | Taip (& naudojant) |
Taip (extends naudojant) |
| Deklaratyvus susiliejimas | Ne | Taip |
Apskritai, objektų struktūros aprašymui geriau naudoti interface, nes jie geriau tinka objektų orientuotam požiūriui ir palaiko deklaratyvų susiliejimą. Visais kitais atvejais, ypač kombinacijoms ir esamų tipų sukurti naujus tipus, type yra lankstesnis.