Предполагая, что у нас есть http: HttpClient
, я хотел бы предоставить метод-оболочку вызова службы следующим образом:
public async post<T>(url: string, body: any): Promise<T> {
// do some stuff
const response = await this.http.post<T>(url, body, this.options).toPromise();
// do more stuff
return response
}
Это работает, как и ожидалось, для любого T
, за исключением void
.Поведение, на которое я надеялся (и все еще пытаюсь реализовать), состоит в том, чтобы не возвращать никакого значения (Promise<void>
), когда сервер не возвращает ответа.Теперь мне интересно, как лучше всего реализовать это, не имея другой функции для пустых тел ответов.
Я полагаю, что нет способа устранить неоднозначность на основе универсального типа?Я пытался найти способы сделать это, но, похоже, нет способа сделать это, что имеет смысл, учитывая то, что делает TypeScript и как он работает.Между прочим, этот тип будет доступен на сайте вызова (как, например, я бы назвал этот метод как service.post<void>(...)
в случае, если я ожидаю пустое тело ответа).
Одна вещь, которая меня интересует, это еслиЯ всегда мог заставить его вернуть строку (responseType: "text"
), а затем проанализировать JSON вручную.Тогда я мог бы проверить статус и строку ответа, если бы они были 200
и ""
соответственно, я бы знал, что могу вернуть undefined
. Если бы это был правильный путь (и я не уверен, что это так), у меня есть несколько вопросов:
- Будет ли анализ вручную JSON иметь производительностьнедостаток?
- Какой метод я должен использовать для его анализа?Что использует
HttpClient
? - Как мне убедиться, что обработка ошибок работает так же, как если бы это происходило из метода
HttpClient.post
?В идеале я бы не хотел, чтобы это отклонялось от механизма ошибок внутри HttpClient.post
.
Или есть другой простой способ, который мне не хватает для реализации желаемого метода?Являются ли какие-либо из моих предположений ложными?