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
JayDee 5 styczeń 2022, 13:22
W przypadku, gdy nie możesz polegać na obecności pewnych właściwości zwracanych przez API (zwłaszcza gdy jest to API innej firmy), zdecydowanie dobrym pomysłem jest unikanie „niezdefiniowanych” błędów - ale nie znam takich ustawienie, Rick & Morty musi wdrożyć opcjonalne łączenie siebie w razie potrzeby podczas obsługi odpowiedzi.
 – 
iLuvLogix
5 styczeń 2022, 13:28
Czy masz TypeScript z włączonym ścisłym sprawdzaniem wartości null? Kompilator powinien wyłapać te błędy za Ciebie.
 – 
Lambda Fairy
5 styczeń 2022, 15:29

1 odpowiedź

Najlepsza 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

1
Holtz Ilya 5 styczeń 2022, 15:24