我正在尝试在this application之后松散地构建一个应用程序,但是我收到了一个TypeScript错误,我想要解释什么是错误的。据我所知,我正在做我应该做的事。
这是我到目前为止编写的代码:
import {Injectable,Inject} from '@angular/core';
import {Http,Headers,URLSearchParams, Response} from '@angular/http';
import {List, Record} from 'immutable';
import {Observable} from "rxjs/Observable";
const TodoRecord = Record({
id: 0,
description: "",
completed: false
});
export class Todo extends TodoRecord {
id:number;
description:string;
completed: boolean;
constructor(props: any) {
super(props);
}
}
@Injectable()
export class TodoBackendService {
constructor(private http: Http){
this.http = http;
}
getAllTodos(){
return this.http.get("/todo");
}
saveTodo(newTodo: Todo): Observable<List<Todo>> {
var headers = new Headers();
headers.append("Content-Type", "application/json; chartset=utf-8");
return this.http.post("/todo", JSON.stringify(newTodo.toJS()),{headers}).share();
}
}
这是Visual Studio Code识别为错误的代码行:
return this.http.post("/todo", JSON.stringify(newTodo.toJS()),{headers}).share();
这是我在VS Code中收到的错误消息:
非常感谢任何帮助。
答案 0 :(得分:5)
这是如何使用地图。假设response.json()返回一组ToDo模型。
saveTodo(newTodo: Todo): Observable<List<Todo>> {
var headers = new Headers();
headers.append("Content-Type", "application/json; chartset=utf-8");
return this.http.post("/todo", JSON.stringify(newTodo.toJS()),{headers})
.map((response: Response) => (<ToDo[]>response.json())).share();
}
答案 1 :(得分:4)
信息说明了一切。 http帖子会返回Observable<Response>
,而不是Observable<List<Todo>>
。
您需要使用map()
从返回的响应中创建List<Todo>
。
答案 2 :(得分:0)
试试这个..
saveTodo(newTodo: Todo) : Observable<any> {
var headers = new Headers();
headers.append('Content-Type', 'application/json; charset=utf-8');
return this.http.post('/todo',JSON.stringify(newTodo.toJS()),{headers}).share();
}