Pracuję z aplikacją Angular, w której w odpowiedzi interfejsu API może brakować niektórych oczekiwanych danych.
Może to spowodować awarię aplikacji, a łatwą poprawką było użycie opcji wiązania łańcuchowego;
Foo.bar.baz => foo.bar?.baz
Czy istnieje ustawienie lub sposób na traktowanie wszystkich '.' jak '?.' i czy byłby to zły pomysł z jakiegokolwiek powodu?
1 odpowiedź
O ile przejrzałem oficjalną dokumentację Angulara i maszynopisu, nie ma takiej opcji. A nie powinno być.
To zdecydowanie zły pomysł. Spowoduje to "ciche" błędy, które będą trudne do znalezienia w miarę rozwoju systemu.
Np. jeśli masz następujący model:
interface ContactInfoDTO {
email: string;
phone: string;
}
interface UserDTO {
name: string;
contactInfo: ContactInfoDTO;
}
I zakładasz, że każdy użytkownik w systemie powinien mieć ważne dane kontaktowe. Gdy uzyskujesz dostęp do właściwości e-mail user?.contactInfo?.email, możesz skończyć z błędem, nie wiedząc, że coś jest nie tak z Twoimi danymi, ponieważ nie został zgłoszony żaden błąd.
Uważnie stosuj łączenie opcjonalne, tylko wtedy, gdy wiesz, że niektóre dane mogą nie być zdefiniowane z jakiegoś powodu.
Jest na ten temat fajny artykuł: https://medium .com/@a.hafez852/is-opcjonalny-chaining-really-a-good-addition-to-javascript-e4bbbc31909f