Texto datilografado “erro TS2532: o objeto é possivelmente 'indefinido'” mesmo após verificação indefinida
Estou tentando usar o--strict
opção ativadatsc
mas me deparei com o seguinte caso "estranho" que parece que não entendo.
Se eu escrever:
function testStrict(input: {query?: {[prop: string]: string}}) {
if (input.query) {
Object.keys(input.query).forEach(key => {
input.query[key];
})
}
return input;
}
o compilador reclama sobre:
test.ts (5,9): erro TS2532: O objeto é possivelmente 'indefinido'.
(a linha ofensiva éinput.query[key];
)
O que não entendo é que já verifiquei indefinidamente o if guard na primeira linha da funçãoif (input.query)
, tãopor que o compilador acha que poderia ser indefinido?
Corrigi isso adicionando outra proteção idêntica antes do acesso ao objeto, como:
function testStrict(input: {query?: {[prop: string]: string}}) {
if (input.query) {
Object.keys(input.query).forEach(key => {
if (input.query) {
input.query[key];
}
})
}
return input;
}
mas não entendo por que outra linha idêntica seria necessária.