I'm curious what you mean by "iterating variables have to be predeclared". In my experience mypy's type inference works with bog standard python constructs like a for loop that appends into a list that gets declared before the loop, aka:
output = []
for x in range(1):
output.append(x)
reveal_type(output)
# note: Revealed type is 'builtins.list[builtins.int*]'