This aspect is what prevents you from statically knowing which interface-implementations you need to generate for a specific concrete type. There could always be new ones added at runtime.
Structural typing is the term typically used to describe "static duck typing".
But who is to say that dynamic evaluation isn't the special case?