#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[]
};