Korzystanie z opcjonalnego operatora łączenia w celu uzyskania dostępu do właściwości obiektu


14

TypeScript 3.7 obsługuje teraz opcjonalny operator łańcuchowy . Dlatego możesz napisać kod taki jak:

const value = a?.b?.c;

Tj. Możesz użyć tego operatora, aby uzyskać dostęp do właściwości obiektu, w którym sam obiekt może być nulllub undefined. Teraz chciałbym zasadniczo zrobić to samo, ale nazwy właściwości są dynamiczne:

const value = a?[b]?.c;

Jednak pojawia się błąd składniowy:

błąd TS1005: oczekiwany „:”.

Co robię tutaj źle? Czy to w ogóle możliwe?

PS: Propozycja wydaje się sugerować, że nie jest to możliwe 😕 (ale może źle rozumiem przykłady składni).


1
?.
Tęsknisz

Tak, oczywiście, wielkie dzięki 😊
Golo Roden

Odpowiedzi:


17

Podczas uzyskiwania dostępu do właściwości za pomocą notacji w nawiasach i opcjonalnego łączenia łańcuchowego, oprócz nawiasów musisz także mieć kropkę:

const value = a?.[b]?.c;

Jest to składnia przyjęta przez propozycję TC39 , ponieważ w przeciwnym razie analizator składni nie będzie w stanie ustalić, czy ?jest to część wyrażenia potrójnego, czy część opcjonalnego tworzenia łańcuchów.


1
Chciałbym wymienić trudne z niemożliwym .
vol7ron,

@ vol7ron dlaczego tak - myślę, że może oczekiwać:
AnArrayOfFunctions

Nie byłby w stanie odróżnić, szczególnie gdy występują błędy.
vol7ron,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.