我有一个枚举。我想使用它的值来为这些值成为键的对象创建类型。以下示例演示了我想要实现的目标:
export enum MyEnum {
PROP_1 = "prop 1",
PROP_2 = "prop 2",
// ... more props
}
export interface MyInterface {
property: {
"prop 1": boolean,
"prop 2": boolean,
// ... more props
}
}
它工作正常,但我想避免在界面中重复枚举中的所有属性。
是否可以执行以下操作:
export enum MyEnum {
PROP_1 = "prop 1",
PROP_2 = "prop 2",
// ... more props
}
// PSEUDOCODE!
export interface MyInterface {
property: {
[values from MyEnum]: boolean
}
}
更新:
感谢@jcalz 的解决方案:
enum MyEnum {
PROP_1 = "prop 1",
PROP_2 = "prop 2",
// ... more props
}
interface PropertyInterface extends Record<MyEnum, boolean> {}
interface MyInterface {
property: PropertyInterface,
}
根据我之前写的内容,它工作得很好,但我刚刚意识到我忘了提到我需要所有这些属性都是可选的。
如果实现的变量MyInterface
定义如下,则给定的解决方案有效:
// VALID!
const myVariable: MyInterface = {
property: {
"prop 1": true,
"prop 2": true,
},
};
但是,如果我省略了如下一些键,则不起作用:
// INVALID :(
const myVariable: MyInterface = {
property: {
"prop 1": true,
},
};