Angular 7.2.5 Typescript 3.2.4: не удается прочитать свойство ‘aaa’ неопределенного типа

#javascript #if-statement #undefined

#javascript #if-оператор #не определено

Вопрос:

У меня есть следующие строки кода:

 if ((this.axes.x amp;amp; this.axes.x.property === 'run_number') ||
        (this.axes.y amp;amp; this.axes.y.property === 'run_number')) {
        this.buildLineGraph(this.axes.y.property === 'run_number');
    } else {
        this.buildScatterGraph();
    }
  

большую часть времени выполняется без проблем, но время от времени происходит сбой, если какой-либо элемент в цепочках:

this.axes.x.property

this.axes.y.property

выдает ошибку:

Не удается прочитать свойство ‘aaa’ неопределенного значения

где aaa является неопределенным элементом: оси, x, y и т.д.

Как мне проверить наличие каждого возможного неопределенного элемента? Нужна ли мне длинная цепочка вложенных операторов if?

Комментарии:

1. Опубликуйте точное сообщение об ошибке, поскольку неясно, что является неопределенным. Похоже, что это this то, что не определено (?)

2. Я знаю, это может быть ‘x’ или ‘axes’ или любая часть в цепочке. Я спрашиваю, есть ли элегантный способ проверить все случаи. Прошу прощения, если сообщение непонятно, но английский не является моим родным языком.

Ответ №1:

Я отвечаю на свой собственный вопрос, но не стесняйтесь опубликовать лучшее и более элегантное решение в виде отдельного ответа, чтобы я мог проголосовать за него.

 if (this amp;amp; this.axes amp;amp; this.axes.x amp;amp; this.axes.y amp;amp; this.axes.x.property amp;amp; this.axes.y.property) {
        if ((this.axes.x amp;amp; this.axes.x.property === 'run_number') ||
            (this.axes.y amp;amp; this.axes.y.property === 'run_number')) {
            this.buildLineGraph(this.axes.y.property === 'run_number');
        } else {
            this.buildScatterGraph();
        }
    }