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 шт):
Как отметил в комментариях @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 показывает как ошибку, но все работает.