[英]Type '{}' is missing the following properties from type 'IResponseConfig'
[英]enum type: is missing the following properties from type
我有一些類型定義如下:
export type Permission = keyof typeof UserPermissions | undefined;
export type Role = keyof typeof UserRoles;
export type PermissionMap = {
[P in UserPermissions]: { [R in UserRoles]: boolean };
};
用戶權限:
enum UserPermissions {
A = 'A',
B = 'B',
C = 'C',
D = 'D',
E = 'E',
}
用戶角色:
enum UserRoles {
ADMIN = 'ADMIN',
STANDARD = 'STANDARD',
}
當我如下定義PermissionMap
類型的對象時:
const permissions: PermissionMap = {
[UserPermissions.A]: {
[UserRoles.STANDARD]: false,
[UserRoles.ADMIN]: true,
},
[UserPermissions.B]: {
[UserRoles.STANDARD]: false,
[UserRoles.ADMIN]: true,
},
[UserPermissions.C]: {
[UserRoles.STANDARD]: true,
[UserRoles.ADMIN]: true,
},
};
我收到以下錯誤:
鍵入'{ A:{標准:假; 管理員:是的; }; B:{標准:假; 管理員:是的; }; C:{標准:真; 管理員:是的; }; }' 缺少“PermissionMap”類型的以下屬性:D、E
在另一種情況下:
const permissions: PermissionMap = {
[UserPermissions.A]: {
[UserRoles.ADMIN]: true,
},
[UserPermissions.B]: {
[UserRoles.ADMIN]: true,
},
[UserPermissions.C]: {
[UserRoles.ADMIN]: true,
},
};
我收到以下錯誤:
計算屬性值的類型是 '{ ADMIN: true; }',不能分配給類型 '{ ADMIN: boolean; 標准:布爾值; }'。
'{ ADMIN: true; 類型中缺少屬性 'STANDARD' }' 但在 '{ ADMIN: boolean; 類型中是必需的標准:布爾值; }'.ts(2418)
我該如何解決這個問題?
這個類型:
export type PermissionMap = {
[P in UserPermissions]: { [R in UserRoles]: boolean };
};
意味着需要所有UserPermissions
鍵: A, B, C, D, E
而在const permissions
中,您僅使用A, B, C
。 如果這是故意的,您可以從UserPermissions
中排除D, E
鍵。
因此,您可以參數化PermissionMap
類型:
enum UserPermissions {
A = 'A',
B = 'B',
C = 'C',
D = 'D',
E = 'E',
}
enum UserRoles {
ADMIN = 'ADMIN',
STANDARD = 'STANDARD',
}
export type Permission = keyof typeof UserPermissions | undefined;
export type Role = keyof typeof UserRoles;
export type PermissionMap<Without extends string = never> = {
[P in Exclude<UserPermissions, Without>]: { [R in UserRoles]: boolean };
};
const permissions: PermissionMap<UserPermissions.D | UserPermissions.E> = {
[UserPermissions.A]: {
[UserRoles.STANDARD]: false,
[UserRoles.ADMIN]: true,
},
[UserPermissions.B]: {
[UserRoles.STANDARD]: false,
[UserRoles.ADMIN]: true,
},
[UserPermissions.C]: {
[UserRoles.STANDARD]: true,
[UserRoles.ADMIN]: true,
},
};
或者您可以使用部分實用程序類型:
enum UserPermissions {
A = 'A',
B = 'B',
C = 'C',
D = 'D',
E = 'E',
}
enum UserRoles {
ADMIN = 'ADMIN',
STANDARD = 'STANDARD',
}
export type Permission = keyof typeof UserPermissions | undefined;
export type Role = keyof typeof UserRoles;
export type PermissionMap = Partial<{
[P in UserPermissions]: { [R in UserRoles]: boolean };
}>
const permissions: PermissionMap = {
[UserPermissions.A]: {
[UserRoles.STANDARD]: false,
[UserRoles.ADMIN]: true,
},
[UserPermissions.B]: {
[UserRoles.STANDARD]: false,
[UserRoles.ADMIN]: true,
},
[UserPermissions.C]: {
[UserRoles.STANDARD]: true,
[UserRoles.ADMIN]: true,
},
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.