代码返回错误类型'Subscription',但类型'ToDo []'中缺少以下属性:length,pop,push,concat和另外26个。
这通常是由于未将return observable设置为数组引起的。就我而言,返回类型是一个数组,但是此错误不断破坏我的应用程序。尽管以前工作过。
toDoList: ToDo[];
this.usertodo = this.getUserTodo(this._userId);
getUserTodo(id: number): ToDo[] {
return this.DataService.apiGetUserTodo(id).subscribe(
todo => {
this.toDoList = todo;
}
);
}
//数据服务
apiGetUserTodo(id: number): Observable<ToDo[]> {
const url = `${this.APIurl}/users/${id}/todos`;
return this.http.get<ToDo[]>(url).pipe(
tap(data => console.log('USER ' + JSON.stringify(data)))
);
}
这应该没有错误,但是会出现此消息
src / app / todo / todo.component.ts:28:8中的ERROR-错误TS2740:类型'Subscription'缺少类型'ToDo []'中的以下属性:长度,弹出,推入,连续和还有26个。
答案 0 :(得分:1)
那是因为您的方法getUserTodo()
返回的是Subscription
而不是ToDo[]
。
我认为您根本不需要usertodo
。例如,您可以在getUserTodo()
中调用ngOnInit()
,其余的都可以。致电toDoList
时,getUserTodo()
将被填充。
或者您可以将getUserTodo()
的返回类型更改为Subscription
。
答案 1 :(得分:0)
由于某些原因-尽管存在错误,代码仍能按预期工作。数组中填充了ToDo对象。
答案 2 :(得分:0)
Please try using below code
export class ToDo {
id: number;
title: string;
complete: boolean;
}
ngOnInit() {
this.getUserTodo(1);
}
// please add void return type instead of ToDo[], because you have already subscribe in the below method
getUserTodo(id: number) {
this.DataService.apiGetUserTodo(id).subscribe(todo => {
this.toDoList = todo;
this.usertodo = todo;
});
}
apiGetUserTodo(id: number): Observable<ToDo[]> {
const url = `api/users/${id}/todos`;
return this.http.get<ToDo[]>(url)
.pipe(
tap(data => {
console.log('USER ' + JSON.stringify(data));
return data;
})
);
}
答案 3 :(得分:0)
您可以使用任何变量来捕获预订,然后将切片的变量分配给您的类变量。
toDoList: ToDo[];
toDo: any;
this.usertodo = this.getUserTodo(this._userId);
getUserTodo(id: number): ToDo[] {
return this.DataService.apiGetUserTodo(id).subscribe(
todo => {
this.toDo = todo;
this.toDoList = this.toDo.slice();
}
);
}