TypeScript定义枚举为键的泛型字典触发类型错误如何解决?
问题原因
你定义泛型类型时没有给泛型参数AnyEnum添加类型约束,TypeScript默认无法确定你传入的AnyEnum是可以作为对象键的合法类型(只有string/number/symbol及它们的联合类型、枚举类型可以作为对象键),因此触发了类型报错。这个问题不属于配置遗漏,是TypeScript泛型的基础规则要求。
解决方法
给泛型参数添加extends string | number | symbol的约束即可,你也可以直接使用TS内置的PropertyKey类型(它本身就是string | number | symbol的别名,写法更简洁)。
修正后的完整代码如下:
enum MyKeys { FOO = 'FOO', BAR = 'BAR', } type MyDictionnary = { [prop in MyKeys]: string } const dictionnary: MyDictionnary = { [MyKeys.FOO]:'hello', [MyKeys.BAR]: 'world' } // 加泛型约束的写法1 type GenericDictionnary<AnyEnum extends string | number | symbol> = { [prop in AnyEnum]: string } // 写法2:用内置PropertyKey简化代码 type GenericDictionnary2<AnyEnum extends PropertyKey> = { [prop in AnyEnum]: string } // 验证使用示例 const testDict: GenericDictionnary<MyKeys> = { FOO: '测试内容1', BAR: '测试内容2' }
内容的提问来源于stack exchange,提问作者Lev
相关产品推荐
相关产品推荐

