类型别名 'Permission' 循环引用自身
Type alias 'Permission' circularly references itself
我正在为我的权限对象定义一个类型,它是:
const Permissions = {
PageManagement: {
MainPageManagement: {
ViewPage: 'view-page',
CreatePage: 'create-page',
UpdatePage: 'update-page',
DeletePage: 'delete-page',
ActivateDeactivatePage: 'activate-deactivate-page',
},
PageSectionManagement: {
ViewPageSection: 'view-page-section',
CreatePageSection: 'create-page-section',
UpdatePageSection: 'update-page-section',
DeletePageSection: 'delete-page-section',
ActivateDeactivatePageSection: 'activate-deactivate-page-section',
},
},
RoleManagement: {
ViewRole: 'view-role',
CreateRole: 'create-role',
UpdateRole: 'update-role',
DeleteRole: 'delete-role',
AssignRole: 'assign-role',
RemoveRole: 'remove-role',
ActivateDeactivateRole: 'activate-deactivate-role',
},
};
如您所见,PageManagement
嵌套了两个对象,而RoleManagement
则没有。
我正在尝试创建一个 n-level
嵌套类型定义,我现在创建的是:
type Permission = Record<string, string | Permission>
但它给出了这个错误:
Type alias 'Permission' circularly references itself
知道我做错了什么吗?我正在使用 TypeScript v4.2.3
您可以使用接口而不是类型。
const permissions: Permission = {
PageManagement: {
MainPageManagement: {
ViewPage: 'view-page',
CreatePage: 'create-page',
UpdatePage: 'update-page',
DeletePage: 'delete-page',
ActivateDeactivatePage: 'activate-deactivate-page',
},
PageSectionManagement: {
ViewPageSection: 'view-page-section',
CreatePageSection: 'create-page-section',
UpdatePageSection: 'update-page-section',
DeletePageSection: 'delete-page-section',
ActivateDeactivatePageSection: 'activate-deactivate-page-section',
},
},
RoleManagement: {
ViewRole: 'view-role',
CreateRole: 'create-role',
UpdateRole: 'update-role',
DeleteRole: 'delete-role',
AssignRole: 'assign-role',
RemoveRole: 'remove-role',
ActivateDeactivateRole: 'activate-deactivate-role',
},
};
interface Permission {
[key: string]: string | Permission
}
Record
是问题的根源。它需要一个完整的类型才能产生一个类型。
type Permission = { [key: string]: string | Permission }
这会起作用。
我正在为我的权限对象定义一个类型,它是:
const Permissions = {
PageManagement: {
MainPageManagement: {
ViewPage: 'view-page',
CreatePage: 'create-page',
UpdatePage: 'update-page',
DeletePage: 'delete-page',
ActivateDeactivatePage: 'activate-deactivate-page',
},
PageSectionManagement: {
ViewPageSection: 'view-page-section',
CreatePageSection: 'create-page-section',
UpdatePageSection: 'update-page-section',
DeletePageSection: 'delete-page-section',
ActivateDeactivatePageSection: 'activate-deactivate-page-section',
},
},
RoleManagement: {
ViewRole: 'view-role',
CreateRole: 'create-role',
UpdateRole: 'update-role',
DeleteRole: 'delete-role',
AssignRole: 'assign-role',
RemoveRole: 'remove-role',
ActivateDeactivateRole: 'activate-deactivate-role',
},
};
如您所见,PageManagement
嵌套了两个对象,而RoleManagement
则没有。
我正在尝试创建一个 n-level
嵌套类型定义,我现在创建的是:
type Permission = Record<string, string | Permission>
但它给出了这个错误:
Type alias 'Permission' circularly references itself
知道我做错了什么吗?我正在使用 TypeScript v4.2.3
您可以使用接口而不是类型。
const permissions: Permission = {
PageManagement: {
MainPageManagement: {
ViewPage: 'view-page',
CreatePage: 'create-page',
UpdatePage: 'update-page',
DeletePage: 'delete-page',
ActivateDeactivatePage: 'activate-deactivate-page',
},
PageSectionManagement: {
ViewPageSection: 'view-page-section',
CreatePageSection: 'create-page-section',
UpdatePageSection: 'update-page-section',
DeletePageSection: 'delete-page-section',
ActivateDeactivatePageSection: 'activate-deactivate-page-section',
},
},
RoleManagement: {
ViewRole: 'view-role',
CreateRole: 'create-role',
UpdateRole: 'update-role',
DeleteRole: 'delete-role',
AssignRole: 'assign-role',
RemoveRole: 'remove-role',
ActivateDeactivateRole: 'activate-deactivate-role',
},
};
interface Permission {
[key: string]: string | Permission
}
Record
是问题的根源。它需要一个完整的类型才能产生一个类型。
type Permission = { [key: string]: string | Permission }
这会起作用。