2016-08-31 8 views
15

Czy istnieje operator w maszynopisie, który jest używany similer do Elvis Operator z angular2, to znaczy powiedzieć niech supppose muszę dostać klucz od obiektu tak:Wymiana Elvis Operatora Angular2 w maszynopisie

this.myForm.name.first_name 

aw przypadku first_name does't istnieje więc będzie rzucać błąd first_name of undefined,

tak mogę Handel ten błąd przy użyciu Ternary operator maszynopisu jak ten

this.myForm.name ? this.myForm.name.first_name : '' 

ale czasami klawisze są już zbyt długo,

więc jest jakiś operator jak Elvis Operator z angular2 w maszynie tak, że można używać tak

this.myForm?.name?.first_name 
+2

downwote dlaczego? czy to nie jest prawidłowe pytanie? –

+2

Masz na myśli [bezpiecznego operatora nawigacji (?.)] (Https://en.wikipedia.org/wiki/Safe_navigation_operator). [Operator Elvisa (?:)] (Https://en.wikipedia.org/wiki/Elvis_operator) to trójskładnikowy skrót do domyślnej oceny pierwszego operandu, jeśli jest prawdziwy. –

Odpowiedz

21

Nie ma operator Elvis w maszynopisie i, o ile mi wiadomo, nic porównywalnego.

Informacje referencyjne można znaleźć w artykule o funkcji pod numerem Suggestion: "safe navigation operator", i.e. x?.y. Numer explanation for not implementing it jest następujący (co, moim zdaniem, jest uzasadnionym powodem):

Zamknięcie tego na razie. Ponieważ nie ma w tym nic specyficznego dla TypeScript, które wymagałoby tego na poziomie ekspresji, tego rodzaju duża zmiana operatora powinna nastąpić w komitecie ES, a nie tutaj.

Ogólnymi sprawdzianami w celu dokonania ponownej oceny byłaby konkretna propozycja ES dotycząca kolejnego etapu lub ogólny konsensus komisji ds. ES, że ta funkcja nie byłaby dostępna przez długi czas (abyśmy mogli zdefiniować nasze własne semantyki i być dość pewnym, że "wygrają").

Alternatywy dla tej notacji byłoby użycie operatora logicznego AND, try/catch lub funkcję pomocnika jak getSafe(() => this.myForm.name.first_name) opisaną w this post.


Aktualizacja lipca 2017: Jak JGFMK zauważył w komentarzach, jest propozycja ECMAScript nazywa Optional Chaining for JavaScript. Jeśli/kiedy wniosek osiągnie etap 4, zostanie dodany do specyfikacji językowej.

+0

dziękuję za odpowiedź, czy są jakieś alternatywy do tego oprócz operatora trójskładnikowego? –

+0

@PardeepJain Co można zrobić, to przypisać puste obiekty, gdy pewne właściwości są niezdefiniowane: 'this.myForm.name = this.myForm.name || {} '. Wtedy możesz być pewien, że zdefiniowane jest 'name'. Innym sposobem jest zdefiniowanie domyślnej struktury danych, a następnie nadpisanie jej rzeczywistymi danymi za pomocą ['Object.assign'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ Obiekt/przypisz). – str

+0

hmm, to jest również możliwe, dzięki :) –