无法在Typescipt中为对象属性设置值。无法设置未定义的属性“ ismain”

时间:2019-11-10 13:46:50

标签: javascript arrays json

我在类中初始化了一个Photo类型的对象,该photo是具有某些属性的接口。然后,我尝试使用数组过滤器过滤照片。

过滤器返回photos数组的副本,但是我指定了我想要的照片,因此我将拥有一个带有1个索引的数组。然后,我尝试将对象内部的属性设置为false,并发生“无法设置角度未定义的属性'ismain'”。有什么想法吗?

这是我的代码。

setMainPhoto(photo: Photo) {
this.userService
  .setMainPhoto(this.authService.decodedToken.nameid, photo.id)
  .subscribe(
    () => {
      // We use the array filter method to filter the photos apart from the main photo
      // Filter returns a copy of the photos array. Filters out anything that it doesn`t match in the p
      this.currentMain = this.photos.filter(p => p.ismain === true)[0];

      this.currentMain.ismain = false;
      photo.ismain = true;
      this.alertify.success('Successfully set to profile picture');
    },
    error => {
      this.alertify.error('Photo could not be set as profile picture');
    }
  );
}

在上述方法中,发生错误。 下面是我的照片界面。

   export interface Photo {

  id: number;
  url: string;
  dateadded: Date;
  ismain: boolean;
  description: string;
}

错误 enter image description here

更新

已解决的问题

enter image description here

服务器的响应需要与对象属性匹配。因此,我不得不更改属性接口以匹配从服务器返回的JSON对象。

2 个答案:

答案 0 :(得分:1)

尝试一下

setMainPhoto(photo: Photo) {
this.userService
  .setMainPhoto(this.authService.decodedToken.nameid, photo.id)
  .subscribe(
    () => {
      // We use the array filter method to filter the photos apart from the main photo
      // Filter returns a copy of the photos array. Filters out anything that it doesn`t match in the p
      this.currentMain = this.photos.filter(p => p.ismain === true)[0];
      if (this.currentMain) {
          this.currentMain.ismain = false;
          photo.ismain = true;
      this.alertify.success('Successfully set to profile picture'); }
    },
    error => {
      this.alertify.error('Photo could not be set as profile picture');
    }
  );
}

如果此方法有效,则过滤器不返回任何内容。

答案 1 :(得分:1)

有趣的是,我也曾想过这个。 Typescript的大小写非常严格,如果您与json对象不完全匹配,它将无法正常工作,创建新属性等。

我发现在构建我的打字稿模型之前先查看json返回值很有帮助,以确保我匹配要发送的对象。