TypeScript编码收获(七)——可索引类型

接口约束了变量,动态添加属性,可以使用可索引类型

在这里插入图片描述

// 获取完整的角色信息
export const getRoleMessage = function (roles: RoleTable): RoleTable {
  return roles.map((role: IRoleTableItem) => {
    role.pageArr = [];
    pageRoleRelations.forEach((pageRoleRelation: IPageRoleRelationItem) => {
      if (role.roleId === pageRoleRelation.roleId) {
        pages.forEach((page: IPageTableItem) => {
          if (page.pageId === pageRoleRelation.pageId) {
            (role.pageArr as IPageTableItem[]).push(page);
          }
        });
      }
    });
    role.pageArr = getPageMessage(role.pageArr);
    return role;
  });
};
export const roles: RoleTable = [
  {
    roleId: 1,
    name: "管理员",
  },
  {
    roleId: 2,
    name: "普通用户",
  },
];
export interface IRoleTableItem {
  roleId: number;
  name: string;
  // 注意可索引类型必须包括这个interface所有属性的ts类型
  [pageArr: string]: IPageTableItem[] | string | number;
}
export type RoleTable = Array<IRoleTableItem>;

访问对象属性有两种方式一种“.”的形式,另一种[索引]的形式,可以使用可索引类型

	const getChildren = function (res: AxiosResponse) {
  const result:Array<RouteRecordRaw> = [];
  res.data.content.forEach((item:IPageSqlItem) => {
    if (item.component) {
      result.push({
        path: item.path,
        component: components[item.component],
        name: item.name,
        meta: item.mate,
      });
    }
  });
  return result;
};

在这里插入图片描述

// 远程可配置页面
export const components: {
  [k: string]: () => Promise<typeof import("*.vue")>;
} = {
  Index11,
  Index12,
  Index13,
  Index14,
  Index21,
  Index22,
  Index23,
  Index24,
  Index31,
  Index32,
  Index33,
  Index34,
  CheckResume,
  Upload,
  Home,
  Index,
  RoleManagement,
  Index35,
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuJie_Boom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值