Если че это типо просто спротивный интерес
вот так вот вышло
https://www.typescriptlang.org/play?#code/MYGwhgzhAECC0G8CwAoa7oQKYBcA8A0tFgB45YB2AJjBDgE4CWFA5gDTQBqAfABQDWALmgEOAN2GcAlMJwALRjEVxoAMkTQA2v2jMRAXUnQAvolQYL0APIAjAFZZgOAHRUsAM2ZYACvQD2AA5Y9DgAnrzyihz8HAjQYmAgAK5YwmImUuaW6PS4SfQU0AwpWejGpdAsuITEZJQ00PxYoX7uRQoQfEIiUmZo2dC5OPmFkRDa+hXlKKjTwH4UdNBg0AC80BRYAO5wvJkoYM7YOLwA5GKnHACMAEwAzL0APo-QvHtr3Bry-jubOwCi9H89Hexike1QhzEQA