Typescript http.get Ошибка: нет перегрузки соответствует этот вызов - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь получить текстовый файл с сервера, поэтому я сделал это:

const httpOptions = {
  headers: new HttpHeaders({
    'Accept': 'text/html',
    'Content-Type': 'text/plain; charset=utf-8'
  }),
  responseType: 'text'
};
this.http.get<any>(url, httpOptions).subscribe(response => {
  const blob = new Blob([response], { type: 'text/csv' });
  const url = window.URL.createObjectURL(blob);
  const anchor = document.createElement('a');
  anchor.download = 'user-permission-auditlog' + endDate.toUTCString() + '.csv';
  anchor.href = url;
  anchor.click();
});

И он работает именно так, как я хочу. Однако компилятор выкрикивает боль:

ошибка TS2769: перегрузка не соответствует этому вызову. Перегрузка 1 из 15, '(url: string, options: {headers ?: HttpHeaders | {[header: string]: string | string [];}; Наблюдать: "события"; params ?: HttpParams | {[param: string ]: string | string [];}; reportProgress ?: boolean; responseType ?: "json"; withCredentials ?: boolean;}): Observable <...> ', выдал следующую ошибку. Аргумент типа '{заголовки: HttpHeaders; responseType: string; } 'нельзя назначить параметру типа' {headers ?: HttpHeaders | {[header: string]: строка | Строка []; }; наблюдать: «события»; params ?: HttpParams | {[param: string]: string | Строка []; }; reportProgress ?: логическое значение; responseType ?: "json"; withCredentials ?: логическое значение; }». Свойство «наблюдаем» отсутствует в типе «{заголовки: HttpHeaders; responseType: string; } 'но требуется в типе' {headers ?: HttpHeaders | {[header: string]: строка | Строка []; }; наблюдать: «события»; params ?: HttpParams | {[param: string]: string | Строка []; }; reportProgress ?: логическое значение; responseType ?: "json"; withCredentials ?: логическое значение; } '.

В нем перечислены 3 из 15, все они жалуются, что responseType должен быть' json ', но' text 'в качестве responseType определенно является одной из перегрузок:

get(url: string, options: { headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: HttpParams | { [param: string]: string | string[]; }; reportProgress?: boolean; responseType: "text"; withCredentials?: boolean; }): Observable<string>

https://angular.io/api/common/http/HttpClient#get

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 18 марта 2020

Ладно, исправление было в том, чтобы изменить responseType на 'text' as 'json', а затем заменить тип возвращаемого значения any на string (именно так он определяет, какую перегрузку использовать).

const httpOptions = {
  headers: new HttpHeaders({
    'Accept': 'text/html',
    'Content-Type': 'text/plain; charset=utf-8'
  }),
  responseType: 'text' as 'json'
};
this.http.get<string>(url, httpOptions).subscribe(response => {
  ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...