I think the problem may be with all then (and through it, reducedim); not sure if these functions can generally be type stable given they work on collections which can be anything. In your case, though if you know for sure that there’s no missing case, why not remove the branch and just do
myproperty(::Type{T}) where T <: Tuple = all(myproperty, T.parameters)::Bool
this will error if at runtime any of the parameter is missing but should be type stable (I think).