TypeScript has a robust set of built-in utility types. There are a number of ways to gain better understanding of TypeScript and recreating these utilities is one if the best ways. To guide this learning track it's a good idea to try and complete TypeScript Challenge which contains a collection of increasingly complex and difficult utility types for participants to attempt.
Over the next few weeks and months I will be working my way through the challenges, and documenting my attempts, in order to reinforce my existing knowledge and learn more about TypeScript principles.