Issue 802
Two types are considered identical when
  - they are both the Any type,
  - they are the same primitive type,
  - they are the same type parameter, or
  - they are object types with identical sets of members.
Two members are considered identical when
  - they are public properties with identical names, optionality, and types,
  - they are private or protected properties originating in the same declaration and having identical
types,
  - they are identical call signatures,
  - they are identical construct signatures, or
  - they are index signatures of identical kind with identical types.