我有一个dataSync服务,该服务在resolve上返回类型为<WebPost>
的Promise。但是当我在组件中使用该服务时,打字稿会继续将返回的数据作为类型对象而不是类型为<WebPost>
的类型对象,这会破坏我的代码。
同样在resolve(data) line
的dataSync服务中,当我将鼠标悬停在数据上时,也会收到此错误
Argument of type '{ _id: string; caption: string; comments: [string]; likes: [string]; price: number; image: string; forUser: string; likesLength: 1; commentsLength: 1; isLiked: boolean; }' is not assignable to parameter of type 'WebPost | PromiseLike<WebPost>'.
我该如何解决?
这是我组件中的方法
getPostFromUrl() {
this.route.params.subscribe(params => {
const id = params['id'];
this.dataSyncService.getPostData(id).then(data => {
this.data._id = id;
this.data.caption = data.caption;
this.data.comments = data.comments;
this.data.likes = data.likes;
this.data.price = data.price;
this.data.image = data.image;
this.data.forUser = data.forUser;
this.data.isLiked = data.isLiked;
this.data.likesLength = data.likesLength;
this.isData = true;
});
});
}
这是dataSyncService
getPostDataP(id): Promise<WebPost> {
return new Promise<WebPost>((resolve, reject) => {
this.authService.getPostP(id).subscribe(d => {
if (d.success) {
const data = {
_id: '',
caption: d.data.caption,
comments: d.data.comments,
likes: d.data.likes,
price: d.data.price,
image: d.data.imageUrl,
forUser: d.data.forUser,
likesLength: d.data.likes.length,
commentsLength: d.data.comments.length,
isLiked: d.data.isLiked
};
resolve(data);
} else {
reject();
}
});
});
}
这是webPost类型
export interface WebPost {
_id: string;
image: string;
forUser: string;
price: number;
likes: [string];
comments: [object];
caption: string;
likesLength: number;
commentsLength: number;
likessLength: number;
isLiked: boolean;
}
答案 0 :(得分:0)
在WebPost
接口声明中,如果希望它们成为以下内容的数组,则应使用string[]
和object[]
而不是[string]
和[object]
字符串/对象。