Pesquisa de site

typescript - Objeto pode ser 'undefined'.ts(2532) quando adiciono dados ao objeto


Eu criei o objeto e a propriedade formTemplateValues. Eu tenho essa propriedade com garantia de 100%, mas vejo o erro: "O objeto pode ser 'undefined'". Não pode ser indefinido, porque eu o criei. Por que estou tendo esse erro e como posso corrigi-lo?

Parque infantil

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

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

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

Resposta #1

Typescript está dependendo da definição de tipo que você deu para o tipo, que diz que o campo pode estar ausente:

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

Quando você então tem a atribuição com o tipo anotado Test, o tipo opcional é mantido, mesmo que você tenha atribuído um valor.

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

Se o campo sempre estiver presente, como você disse, você poderia remover o opcional da definição do tipo.
Alternativamente, você pode verificar o campo antes de adicionar, ou elevar o campo interno para um tipo separado e deixar o tipo da variável inferido:

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

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