Operator in

Zawęża typ unii obiektów, sprawdzając, czy obiekt ma daną właściwość.

Na tej stronie

Przykład

#
TypeScript
type EmailContact = { name: string; email: string }
type PhoneContact = { name: string; phone: string }

function contactLine(contact: EmailContact | PhoneContact): string {
  if ('email' in contact) return `${contact.name}: ${contact.email}`
  return `${contact.name}: tel. ${contact.phone}`
}

console.log(contactLine({ name: 'Ania', email: 'ania@codeworlds.pl' }))
console.log(contactLine({ name: 'Kuba', phone: '+48 600 100 200' }))
Wynik
Ania: ania@codeworlds.pl
Kuba: tel. +48 600 100 200

Definicja i zastosowanie

#

Operator in sprawdza, czy obiekt ma właściwość o podanej nazwie. W TypeScripcie służy do zawężania unii obiektów bez wspólnej etykiety: po if ("email" in contact) kompilator wie, że to wariant z polem email.

To wygodne, gdy warianty różnią się zestawem pól, a nie mają pola typu kind. Jeśli możesz zmienić strukturę danych, unia rozróżnialna jest zwykle czytelniejsza.

Od TypeScriptu 4.9 operator in zawęża też wartości typu object i unknown: po sprawdzeniu kompilator wie, że właściwość istnieje, choć jej typ to unknown.

Składnia

#
Składnia
if ("pole" in obiekt) {
  // obiekt ma pole
}

Dobre praktyki

#
  • Operator in sprawdza też właściwości dziedziczone. Do sprawdzenia tylko własnych pól użyj Object.hasOwn().
  • Gdy wariantów przybywa, zamień je na unię rozróżnialną z polem kind.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.