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).

Golo Roden
źródło
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.

Wieża Mikołaja
źródło
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,