为什么我的对象类型没有更新?

时间:2020-07-31 13:10:27

标签: reactjs typescript

我正在使用react typescript创建权限服务,但遇到了以下问题。我上课了:

import {IPermission} from "../interfaces/IPermission";

class PermissionService {
    private permissions: IPermission[] = [];

    constructor(permissions: IPermission[]) {
        this.permissions = permissions;
    }

    public getValue(key: string): IPermission['value'] {
        const perm = this.permissions.find(permission => permission.key === key);
        if (!perm) {
            throw new Error('Could not find the permission');
        }

        return perm.value;
    }

    public modifyPermission(key: string, defaultValue: any, value: any): void {
        const perms = [...this.permissions];

        for (let i = 0; i < perms.length; i++) {
            perms[i].defaultValue = defaultValue;
            perms[i].value = value
        }

        this.permissions = perms;
        console.log(perms);
    }

    public parseActivePermissions(permissions: IPermission[]): IPermission[] {
        this.permissions.forEach(permission => {
            permissions.forEach(activePermission => {
                if (permission.key === activePermission.key) {
                    permission.defaultValue = activePermission.defaultValue;
                    permission.value = activePermission.value;
                }
            })
        })

        return this.permissions;
    }

    public getAll(): IPermission[] {
        return this.permissions;
    }
}

export default PermissionService;

和一个AdminPermissions数据文件

import PermissionService from "../services/permission.service";
import {IPermission} from "../interfaces/IPermission";
import Permissions from "./Permissions";

const service: PermissionService = new PermissionService(Permissions);
service.modifyPermission('canAccessAcp', true, true);

const AdminPermissions: IPermission[] = service.getAll();
export default AdminPermissions;

问题是service.modifyPermission()不会更新defaultValue和权限值。控制台记录时仍然为假。为什么呢?

更新#1

稍微更改了文件。仍然不起作用。现在,我直接更改值,但它们仍然记录为false。

class AdminPermissions {
    public getAll(): IPermission[] {
        const service: PermissionService = new PermissionService(Permissions);

        service.permissions.forEach(permission => {
            if (permission.key === 'canAccessAcp') {
                permission.defaultValue = true;
                permission.value = true;
            }
        })

        return service.permissions;
    }
}

2 个答案:

答案 0 :(得分:0)

问题在于,使用forEach并没有更改每个项目的实际值,因此您应该执行以下操作:

class AdminPermissions {
  public getAll(): IPermission[] {
    const service: PermissionService = new PermissionService(Permissions);
    return service.permissions.map(permission => {
      if (permission.key === 'canAccessAcp') {
        return (
          {
            ...permission,
            defaultValue: true,
            value: true
          }
        )
      }
      return permission
    });
  }
}

答案 1 :(得分:0)

我找到了解决方法。

permission.service.ts

    public modifyPermission(key: string, defaultValue: any, value: any): void {
        const perms: IPermission[] = this.permissions.map(permission => {
            if (permission.key === key) {
                console.log('found permission');
                return {
                    ...permission,
                    defaultValue,
                    value
                }
            }

            return permission
        })

        this.permissions = perms;
    }
相关问题