TypeScriptUnie i zawężanie
Unia (A | B)
Typ, który może być jednym z kilku typów.
Przykład
#TypeScript
function formatId(id: string | number): string {
if (typeof id === 'number') {
return `#${id.toString().padStart(4, '0')}`
}
return id.toUpperCase()
}
console.log(formatId(42))
console.log(formatId('cw-html'))Wynik
#0042 CW-HTML
Definicja i zastosowanie
#Unia łączy typy pionową kreską: string | number oznacza wartość, która jest napisem albo liczbą. To jeden z najczęściej używanych mechanizmów TypeScriptu, bo dane w prawdziwych programach często przyjmują kilka postaci.
Na wartości typu unii możesz od razu używać tylko tego, co jest wspólne dla wszystkich członków. Żeby skorzystać z metod konkretnego typu, trzeba go najpierw zawęzić, na przykład warunkiem z typeof.
Unie literałów ("easy" | "medium" | "hard") to prosty i lekki sposób na listę dozwolonych wartości, często wygodniejszy niż enum.
Składnia
#Składnia
type Nazwa = TypA | TypB | TypCWięcej przykładów
#TypeScript
function length(value: string | number) {
return value.length
}
// Błąd: Property 'length' does not exist on type 'string | number'.Dobre praktyki
#- Gdy członkami unii są obiekty, dodaj im wspólne pole z literałem (np.
kind). Powstanie unia rozróżnialna, łatwa do zawężania. - Tablica elementów różnych typów to
(string | number)[], a niestring | number[].
Powiązane hasła
#- Zawężanie typówUstalanie dokładniejszego typu wartości na podstawie sprawdzeń w kodzie.
- Unie rozróżnialneUnie obiektów ze wspólnym polem-etykietą, które pozwala łatwo odróżnić warianty.
- Przecięcie (A & B)Typ łączący wszystkie pola kilku typów jednocześnie.
- Typy literałoweTypy dopuszczające tylko konkretne wartości, np. "easy" | "hard".
Widzisz błąd albo brakuje przykładu? Napisz do nas.