Inferencia contextual: de dónde sale el tipo
TypeScript no infiere en el vacío: usa contexto de asignación, parámetros y retornos.
Una misma expresión puede inferirse distinto según el lugar donde se usa. Ese detalle explica muchos comportamientos "raros" al empezar.
Cuando pasas callbacks, la firma esperada condiciona los tipos inferidos de sus parámetros: ahí conviene leer la API receptora.
Comprender esto evita anotaciones redundantes y te permite detectar cuándo falta una pista explícita para el compilador.