Our SDK is written in Typescript and heavily uses generics in order to allow users to use custom data and still have decent typing support.
We rely on multiple contexts in our SDK to access components, functions, and data. Context also allows you as a developer to override our defaults for many of these throughout the SDK. Understanding how to draw upon values in context is important to customizing the SDK for your own needs.
We use/expose a bunch of our component's hooks so users can use them in order to replicate some behaviour/data parsing when creating custom components. Understanding how to work with hooks can come in very handy.