我正在使用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”)。 那我该如何解决这种情况呢?