For anybody interested in this topic of Siren and TypeScript, I've also created two libraries somewhat analogous to your "core" and "client" libraries called siren-types and siren-nav, respectively. You can find them here:
They are published to NPM as well. I haven't updated them in a while, but they serve my purposes pretty well. Feel free to borrow any ideas from them. The thing I'm particularly pleased with in siren-nav is the chaining API. It allows you to build up a recipe for navigation starting from the root API level in a declarative way. While the entire expression is a single async evaluation, it requires carefully chaining together a bunch of async requests underneath.
To me, some of the highlights of siren-nav are the fact that it has a "squash" option for when you'd like to describe a complex recipe to navigate from root to a particular resource but you don't want to repeat it each time (so it resolves it once and caches the result). Another feature is that it allows you to leverage relations that include URI templates so you can substitute values in. I find this particular useful because often I don't want to provide a link for every resource possible but instead include a URI as a way for the client to construct the URI programmatically. The way it handles actions gives a fair amount of flexibility in how you handle the responses.
--
Mike