I think this ends up calling Core.Compiler.return_type(fn, Tuple{eltype(itr)}) on the inside. Which is not new, but comes with various brightly coloured warning stickers notifying you that you cannot sue anyone if it decides to give you Any one day.
But to allow generators you’ll need something else anyway, since e.g. eltype(i for i in 1:3) == Any. I guess the most Julian thing would be to evaluate the first element, and widen later if subsequent ones differ.