If you think of a NamedTuple as a container implemented using a Tuple, then this is OK, but if you think of it as “a Tuple with names” then this is inconsistent.
Looking at the source, it seems that having broader types for the fields is something that is allowed, at least Base.show takes special care when printing.
@jeff.bezanson, since you wrote most of this, can you please clarify the intention?
also @cstjean’s point about lack of covariance and whether this is intended.
It’s not clear whether NamedTuples (or, indeed, tuples! see https://github.com/JuliaLang/julia/issues/24614) should be covariant, but for now they are intentionally invariant. The main motivation was of course missing data, where allowing Union{T,Missing} as the field type of a concrete type is potentially useful.