TypeScriptInterfejsy i klasy
Pola opcjonalne (?)
Właściwości, które mogą, ale nie muszą występować w obiekcie.
Przykład
#TypeScript
interface Profile {
name: string
bio?: string
level?: number
}
function card(profile: Profile): string {
const bio = profile.bio ?? 'Brak opisu'
return `${profile.name} (poziom ${profile.level ?? 1}): ${bio}`
}
console.log(card({ name: 'Ania', level: 7 }))
console.log(card({ name: 'Kuba', bio: 'Uczę się Pythona' }))Wynik
Ania (poziom 7): Brak opisu Kuba (poziom 1): Uczę się Pythona
Definicja i zastosowanie
#Znak zapytania po nazwie pola (avatar?: string) oznacza, że pole jest opcjonalne. Obiekt bez niego nadal jest poprawny, a typ tego pola to w praktyce string | undefined.
Przed użyciem pola opcjonalnego kompilator wymaga sprawdzenia, czy istnieje. Najwygodniej zrobić to operatorami ?. i ?? albo zwykłym warunkiem.
Przy włączonej opcji exactOptionalPropertyTypes pole opcjonalne nie może mieć jawnie przypisanego undefined. Rozróżnia to „brak pola” od „pola ustawionego na undefined”.
Składnia
#Składnia
interface Nazwa {
wymagane: typ
opcjonalne?: typ
}Dobre praktyki
#- Wartości domyślne dla pól opcjonalnych najłatwiej ustawić przez
??albo destrukturyzację z domyślną wartością. - Do zamiany wszystkich pól na opcjonalne służy typ narzędziowy
Partial<T>.
Powiązane hasła
#Widzisz błąd albo brakuje przykładu? Napisz do nas.