将枚举分配为对象类型的键的值
Assign an enum as the value of the key of an object type
下面是我的枚举:
export enum MyEnum {
Enum1 = 'Enum 1',
Enum2 = 'Enum 2',
Enum3 = 'Enum 3',
Enum4 = 'Enum 4',
Enum5 = 'Enum 5',
}
我想为下面显示的示例对象创建一个类型:
const testData = {
test1: {
Enum1: 'Enum 1',
Enum2: 'Enum 2',
},
test2: {
Enum1: 'Enum 1',
Enum2: 'Enum 2',
Enum3: 'Enum 3',
Enum4: 'Enum 4',
},
test2: {
Enum1: 'Enum 1',
Enum2: 'Enum 2',
Enum4: 'Enum 4',
},
};
到目前为止,我可以想出:
type FilteredBuyableMethods = {
[key: string]: Partial<{
[key in MyEnum]: string
}>
};
如何用密钥的确切值替换 [key in MyEnum]: string
中的 string
?
所以,如果键是 Enum1
,它的值应该只是 'Enum 1'
等等。
此外,附加到 testData
中可用的键(例如 test1
、test2
)的值(具有枚举键和值的对象)应该是枚举 MyEnum
。不一定来自枚举 MyEnum
的所有值都应该存在(部分),但除了枚举键值对之外,不应添加任何随机键值对。感谢期待。
使用 and 中的技巧,您可以构造一个映射类型,如下所示:
type FilteredBuyableMethods = {
[key: string]: Partial<{
[key in keyof typeof MyEnum]: `${typeof MyEnum[key]}`
}>
};
注意 typeof MyEnum[key]
解析为 (typeof MyEnum)[key]
。
(online playground)
这将防止错误的键(不是枚举的键)和错误的值(分别不适合它们的键)。
下面是我的枚举:
export enum MyEnum {
Enum1 = 'Enum 1',
Enum2 = 'Enum 2',
Enum3 = 'Enum 3',
Enum4 = 'Enum 4',
Enum5 = 'Enum 5',
}
我想为下面显示的示例对象创建一个类型:
const testData = {
test1: {
Enum1: 'Enum 1',
Enum2: 'Enum 2',
},
test2: {
Enum1: 'Enum 1',
Enum2: 'Enum 2',
Enum3: 'Enum 3',
Enum4: 'Enum 4',
},
test2: {
Enum1: 'Enum 1',
Enum2: 'Enum 2',
Enum4: 'Enum 4',
},
};
到目前为止,我可以想出:
type FilteredBuyableMethods = {
[key: string]: Partial<{
[key in MyEnum]: string
}>
};
如何用密钥的确切值替换 [key in MyEnum]: string
中的 string
?
所以,如果键是 Enum1
,它的值应该只是 'Enum 1'
等等。
此外,附加到 testData
中可用的键(例如 test1
、test2
)的值(具有枚举键和值的对象)应该是枚举 MyEnum
。不一定来自枚举 MyEnum
的所有值都应该存在(部分),但除了枚举键值对之外,不应添加任何随机键值对。感谢期待。
使用
type FilteredBuyableMethods = {
[key: string]: Partial<{
[key in keyof typeof MyEnum]: `${typeof MyEnum[key]}`
}>
};
注意 typeof MyEnum[key]
解析为 (typeof MyEnum)[key]
。
(online playground)
这将防止错误的键(不是枚举的键)和错误的值(分别不适合它们的键)。