Объект, возможно, «не определен».ts (2532), когда я добавляю данные в объект

#typescript

#typescript

Вопрос:

Я создал объект и свойство formTemplateValues . У меня есть это свойство со 100% гарантией, но я вижу ошибку: «Объект, возможно, «не определен»». Он не может быть не определен, потому что я его создал. Почему у меня возникла эта ошибка и как я могу ее исправить?

Игровая площадка

 interface Test {
  formTemplateValues?: {
    tabData?: {
      timeInterval?: string;
      };
    }[];
}

let a: Test = {
    formTemplateValues: []
    };

a.formTemplateValues[0] = {  // Object is possibly 'undefined'.ts(2532)
    tabData: {
      timeInterval: "dddd"
    }
}
  

Ответ №1:

Typescript полагается на определение типа, которое вы дали для типа, в котором указано, что поле может отсутствовать:

 interface Test {
  formTemplateValues?: {
  // ---------------^
    tabData?: {
      timeInterval?: string;
    };
  }[];
}
  

Когда у вас затем есть назначение с аннотированным типом Test , необязательный тип сохраняется, даже если вы присвоили значение.

 const a: Test = {
  // This is still considered possibly undefined
  formTemplateValues: []
};
  

Если поле всегда будет там, как вы сказали, вы можете удалить необязательный параметр из определения типа.
В качестве альтернативы, вы можете либо проверить наличие поля перед добавлением, либо перевести внутреннее поле в отдельный тип и оставить выведенный тип переменной:

 interface TemplateValue {
  tabData?: {
    timeInterval?: string;
  };
};

const a = {
  formTemplateValues: [] as TemplateValue[]
};