类型'{标题的参数:标题; }'不可分配给类型'{headers ?: HttpHeaders的参数

时间:2018-06-20 21:25:10

标签: angular angular5

我正在使用Angular5。这是代码:

 constructor(private http: HttpClient, private configService: ConfigService) 
{
...
}

login(userName, password) {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');

    return this.http
      .post(
      this.baseUrl + '/auth/login',
      JSON.stringify({ userName, password }), { headers }
      )
      .map(res => res.json())
      .map(res => {
        localStorage.setItem('auth_token', res.auth_token);
        this.loggedIn = true;
        this._authNavStatusSource.next(true);
        return true;
      })
  .catch(this.handleError);
  }

并且此代码导致错误:错误TS2345:类型'{参数headers:Headers; }'不可分配给类型'{headers ?: HttpHeaders | {[header:string]:字符串|串[]; };观察?参数?:Ht ...'。   属性“标题”的类型不兼容。     类型'Headers'不能分配给类型'HttpHeaders | {[header:string]:字符串|串[]; }'。       类型'Headers'不能分配给类型'{{Header:string]:string |串[]; }'。         “标头”类型中缺少索引签名。

我在github上发现了一个相关问题及其解释:https://github.com/angular/angular/issues/18586#issuecomment-323216764

因此,我更改了代码以不使用Headers类型:

login(userName, password) {
const headers = { 'Content-Type': 'application/json' };

return this.http
  .post(
  this.baseUrl + '/auth/login',
  JSON.stringify({ userName, password }), { headers }
  )
  .map(res => res.json())
  .map(res => {
    localStorage.setItem('auth_token', res.auth_token);
    this.loggedIn = true;
    this._authNavStatusSource.next(true);
    return true;
  })
  .catch(this.handleError);
 }

我提到的错误消失了。但是然后就行了

.map(res => res.json())

我收到错误:类型'Object'不存在属性'json'。之后,我发现不需要使用HttpClient的.map(res => res.json())。但是,如果我删除此行,则在

.map(res => {
    localStorage.setItem('auth_token', res.auth_token);

我无法访问auth_token属性(类型“ Object”上不存在属性“ auth_token”)。 那我该如何解决这种情况呢?

0 个答案:

没有答案