http.post не компилируется, когда параметры передаются как переменная, а не как литерал - PullRequest
0 голосов
/ 02 мая 2018

Я заметил, что следующий код не компилируется (параметры передаются как переменная httpOptions)

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
  withCredentials: true, 
  observe: 'response'
};

return this.http.post(this.SIGNIN_USER_URL, body, httpOptions); // options is passed as a variable `httpOptions`

Я получаю следующую ошибку

Argument of type '{ 
    headers: HttpHeaders; 
    observe: string; 
    responseType: string;
}' is not assignable to parameter of type'{ 
    headers?: HttpHeaders;
    observe?: "body";
    params?: HttpParams; reportProgress?: boolean;
    respons...'.

Types of property 'observe' are incompatible.
Type 'string' is not assignable to type '"body"'.'

Но следующий код делает (параметры передаются как буквальный объект)

return this.http.post(this.SIGNIN_USER_URL, body, {
    headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
    withCredentials: true, 
    observe: 'response'
})

Почему?

1 Ответ

0 голосов
/ 02 мая 2018

Как указано в комментарии, без помощи компилятор TypeScript будет предполагать, что данная строка может быть любой строкой, и поэтому выводит ее тип как string.

Параметр options *1006* метода HttpClient.post(...), однако, является более строгим и принимает только тип HttpObserve (, который допускает только 'body' | 'events' | 'response') для свойства observe .

Если вы используете утверждение типа для помощи компилятору, вы исправите свою проблему:

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
  withCredentials: true, 
  observe: 'response' as 'response'
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...