在Typescript中返回类型

时间:2018-08-18 07:53:22

标签: angular typescript types promise observable

我有一个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;

}

1 个答案:

答案 0 :(得分:0)

WebPost接口声明中,如果希望它们成为以下内容的数组,则应使用string[]object[]而不是[string][object]字符串/对象。