ERROR TypeError: Set.prototype.delete is not a function

Не могу удалить объект из Set-а. Ошибка ERROR TypeError: this.user.roles.delete is not a function Моя функция

removeRole(userid: number, roleid: number) {
    this.users.forEach((u) => {u.id === userid ? this.user = u : u; });
    this.user.roles.forEach((role) => {role.id === roleid ? this.user.roles.delete(role) : role; } );
    this.userService.update(this.user).subscribe((perf) => {
        this.user = perf;
        this.toast.success('Permission deleted', 'cloud-upload-outline');
      },
      err => {
        this.toast.error('Something gone wrong', 'cloud-download-outline');
      });
  }

Модель User.ts

export class User {
  id: number;
  username: string;
  password?: string;
  roles: Set<Role>;
  profile: Profile;
  documents?: Set<Document>;
  positions?: Position[];
  contacts: Contacts;
  additional: Additional;
}

До этой функции выводил user-а в console.log(), правильно выводит. В чем может быть ошибка? Гуглил, но не нашел ответа. Думаю делаю очень простую ошибку, так как результат поиска только одна подходящая ссылка.


Ответы (1 шт):

Автор решения: Wihapa

Как отметил в комментариях @andreycrane Set после запуска преобразовывался в Array. Поэтому функции Set-a не применялись.

Когда вы извлекаете данные из БД они преобразуются в массив. Вам нужно либо самостоятельно, либо с использованием ORM определить в какие значения JS будут транслироваться данные из БД и наоборот. – @andreycrane

Изменил Set на Array

        this.roles = [...user.roles];
        const index = this.roles.findIndex(n => n.id === roleid);
        if (index !== -1) {
          this.roles.splice(index, 1);
        }

Хотя когда использую переменную в IDE показывает как ошибку, но все работает.

→ Ссылка