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.

questionAnswers(1)

yourAnswerToTheQuestion