What you are asking for is to get the benefits of TypeScript type safety, but you do not want to implement the heavy lift required to gain those benefits.
In TypeScript, types are not strictly enforced without extra steps. You can take an interface and apply it to a response to gain the benefits of dot notation, and "implied" type checking via the IDE during development, however, you will quickly realize that the types of that interface can be violated by the API... this is a "good faith" data contract implementation, and, you are using it as an implied shape to your data response and trusting the API to not violate it.
If you want to go a step beyond this, you will need to use a class pattern that implements an interface via constructor to "enforce" explicit type checking as the class instance is created... there is no other way that I know of to to gain this benefit... and it requires you to use a map
implementation to loop over the response and map the data as you have already pointed out.
There is information you will know at the time of the API call that can be used during the response for classifying the response shape into the respective model class... you can certainly "abstract" this away in to "several services" by making the services API/model specific, but in the end, no matter the implementation you choose, you will have to implement classification/mapping logic in some way/at some level to gain type safety for your API responses.
True type safety in TypeScript only exists at runtime by mapping responses to class objects (run time) that implement explicit data type checking via the constructor.
Additional info on how TypeScript behaves:
Runtime typesafety in typescript