With extension type, we now have five declarations which can contain static and instance members, some also constructors, and which all have the same rules about naming conflicts in the declaration. We hope, since we've had to either copy the rules for each type, or refer to "just like class" for things that are almost, but not entirely, like a class.
We should extract the shared rules into a single abstraction, so that we can specify the rules precisely (and) once.
Here is a suggested approach.