Texto mecanografiado "error TS2532: El objeto es posiblemente 'indefinido'" incluso después de una verificación indefinida

Estoy tratando de usar el--strict opción entsc pero me encontré con el siguiente caso "extraño" que parece no entender.

Si escribo

function testStrict(input: {query?: {[prop: string]: string}}) {
  if (input.query) {
    Object.keys(input.query).forEach(key => {
      input.query[key];
    })
  }
  return input;
}

el compilador se queja de:

test.ts (5,9): error TS2532: El objeto es posiblemente 'indefinido'.

(la línea ofensiva esinput.query[key];)

Lo que no entiendo es que ya he verificado si no está definido con el protector if en la primera línea de la funciónif (input.query), entonces¿Por qué el compilador cree que podría ser indefinido?

Lo arreglé agregando otro protector idéntico antes del acceso al 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;
}

pero no entiendo por qué se requeriría otra línea idéntica.

Respuestas a la pregunta(1)

Su respuesta a la pregunta