У меня есть сценарий, где у меня есть fn, который выполняет запрос к конечной точке x. Этот запрос принимает много разных типов тел, но для каждого ответ всегда известен. Пример:
interface RequestA {
reqA1: string;
reqA2: number;
}
interface RequestB {
reqB1: string;
reqB2: number;
}
interface RequestC {
reqC1: string;
reqC2: number;
}
interface ResponseA {
resA1: string;
resA2: number;
}
interface ResponseB {
resB1: string;
resB2: number;
}
interface ResponseC {
resC1: string;
resC2: number;
}
type Requests = RequestA | RequestB | RequestC;
type GetResponseType<T> = T extends RequestA ? ResponseA : T extends RequestB ? ResponseB : T extends RequestC ? ResponseC : never;
const makeRequest = <T extends Requests>(a: T) => {
return fetch(body) as GetResponseType<T>;
}
при использовании:
const obj = { reqA1: 'hello', reqA2: 123}
const response = makeRequest(obj) // response would give me then access to both resA1 and
resA2;
Это работает, фактически выполняет то, что я хочу, с точки зрения пользователя функции makeRequest не нужно предоставлять какой-либо тип, этопросто потребляет, и на основе входных данных, которые он предоставляет, он вернет вам возврат. Я просто упомянул, что я также выполнил перегрузку функции, в которой вы просто пишете перегрузку makeRequest со всеми предоставленными комбинациями пар, но я хотел сделать это способом копирования / вставки или скрытым логическим способом работы с машинописью. Тогда мой вопрос: можно ли улучшить этот метод?
Заранее спасибо ..