Есть вот такой интерфейс со сгенерированными типами из openapi.
export interface paths {
'/api/v1/geo_points': {
get?: never;
put?: never;
post: operations['GetGeoPoints'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/locations': {
get: operations['GetPropertiesByName'];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/locations/point': {
get?: never;
put?: never;
post: operations['GetAreasInPoint'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
};
Хочется написать общий динамический тип со схемой post запроса, что-то типо такого:
type Schemas<P extends keyof paths> = paths[P]['post']['requestBody'] // etc..
Проблема в том, что в интерфейсе paths для каждой ручки не опциональное поле только то которые используется в данном запросе по спецификации, остальные опциональны. В связи с этим динамическое подставление path в примере выше будет выдавать ошибку при обращение к тем полям которые идут после типа http запроса. В примере выше после обращения к
requestBody TS выдаст ошибку, т.к post может быть опциональным.
Мб есть вариант написать как нибудь что-бы это работало с динамическим path?