Pola opcjonalne (?)

Właściwości, które mogą, ale nie muszą występować w obiekcie.

Na tej stronie

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.