TypeScript:在复杂类型中组合枚举

TypeScript:在复杂类型中组合枚举,typescript,types,enums,Typescript,Types,Enums,在TypeScript 3.7.5中,我有两个enums和一个const,我想使用enums为常量编写一个非常复杂的type enum操作{ 跳跃, 跑 射击 } 枚举字符{ 福, 酒吧, } 类型IDontKnow=。。。; 常量操作:IDontKnow={ [Character.Foo]:{ [动作.跳跃]:错误, [Action.Run]:正确, [行动,射击]:错误, }, [Character.Bar]:{ [动作.跳跃]:错误, [Action.Run]:正确, [行动,射击]:对,

在TypeScript 3.7.5中,我有两个
enum
s和一个
const
,我想使用
enum
s为常量编写一个非常复杂的
type

enum操作{
跳跃,
跑
射击
}
枚举字符{
福,
酒吧,
}
类型IDontKnow=。。。;
常量操作:IDontKnow={
[Character.Foo]:{
[动作.跳跃]:错误,
[Action.Run]:正确,
[行动,射击]:错误,
},
[Character.Bar]:{
[动作.跳跃]:错误,
[Action.Run]:正确,
[行动,射击]:对,
},
};
问题是,我通常在使用
enum
s或不知道一个对象将有多少键时使用方括号表示类型,但我不能同时使用这两种类型,例如:

const usingEnums:{[字符]:字符串;}={
[Character.Foo]:“约翰”
};
常量usingArray:{[名称:字符串]:操作[]}={
约翰:[Action.Run,Action.Shoot],
“简”:[动作。跳跃,动作。奔跑,动作。射击]
};
有什么想法吗?

您可以使用
Character
enum键和使用
Action
enum键的内部对象创建一个:

type IDontKnow = {
    [key in Character]: {
        [key in Action]: boolean
    }
};

我猜
类型IDontKnow={[key-in-Character]:{[key-in-Action]:boolean}@AlekseyL。非常感谢你,我真不敢相信我竟然没有意识到使用“in”operator@AlekseyL. 请将其作为答案发布,以便accepted@MingweiSamuel张贴