Почему не срабатывает такой код?

Есть такая строка:

const id = this.data.test.id

Но бывает так что this.data может содержать немного другую структуру, и тогда чтобы получить id нужно делать так:

const id = this.data.testID

В коде я сделал так:

const id = this.data.test.id || this.data.testID;

Но в итоге приложение падает с ошибкой

TypeError: Cannot read properties of undefined (reading 'id')

Буду благодарен за помощь!


Ответы (2 шт):

Автор решения: smellyshovel
const id = this.data.test.id || this.data.testID;

Решение "в лоб" - поменять местами:

const id = this.data.testID || this.data.test.id;

Иное решение - использовать тернарный условный оператор:

const id = this.data.test ? this.data.test.id : this.data.testID;

Третий вариант - optional chaining вместе с nullish coalescing:

const id = this.data.test?.id ?? this.data.testID;

Почему выдает ошибку? Потому что объект this.data.test равен undefined. А вы пытаетесь обратиться к свойству id этого объекта.

→ Ссылка
Автор решения: Nikita

Можно сделать вот так:

const id = this.data?.test?.id || this.data?.testID;
→ Ссылка