I am afraid that even the “official” interface of many of the abstract types is underdocumented, eg I recently asked for a clarification about custom indexes, and ended up opening an issue.
This may be the best solution for your problem, but at the same time you should consider the possibility that some of the abstract types are just there to help implementation (particularly, dispatch) and may not define an actual interface other than what the code shows.