Замена оператора Элвиса Angular2 в Typescript

Есть ли какой-либо оператор в typescript, который используется similer для Elvis Operator angular2, я имею в виду пусть я должен получить ключ от объекта следующим образом:

this.myForm.name.first_name

и в случае, если first_name не существует, поэтому он будет вызывать ошибку first_name of undefined,

да, я могу передать эту ошибку, используя Ternary operator из typescript, как этот

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

но иногда клавиши становятся слишком длинными,

то есть какой-либо оператор, такой как Elvis Operator of angular2 в typescript, так что я могу использовать как это

this.myForm?.name?.first_name

Ответ 1

В TypeScript нет оператора elvis и, насколько я знаю, ничего не сравнимо.

Для справки см. запрос функции в Предложение: "безопасный навигационный оператор" , т.е. x?.y. Объяснение для его неактивности является следующим (что, на мой взгляд, является веской причиной):

Закрытие этого пока. Поскольку на самом деле не существует ничего TypeScript -специфического, что потребовало бы этого на уровне выражения, такой вид больших изменений оператора должен произойти в комитете ES spec, а не здесь.

Общие триплеты для переоценки этого будут конкретным предложением ЕС, достигающим следующего этапа, или общим консенсусом комитета ES о том, что эта функция не будет происходить в течение длительного времени (чтобы мы могли определить нашу собственную семантику и быть уверенным, что они "победят" ).

Альтернативой этой нотации будет использование логического оператора AND, try/catch или вспомогательной функции типа getSafe(() => this.myForm.name.first_name), как описано в этот пост.


Обновление июля 2017 года. Как отметил JGFMK в комментариях, есть предложение ECMAScript под названием Необязательная цепочка для JavaScript. Если/когда предложение достигнет этапа 4, оно будет добавлено к спецификации языка.