I was not aware of the NamedTuple syntax originally discussed in JuliaLang/julia#28579. I think a quick mention of this would be good, since many users may just be needing this functionality. The unpack(x, ::Val{property}) thing is nice, but Julia should still be able to efficiently compile property access even if it's defined with an if-else tree inside a Base.getproperty method.