Reactjs 基于类型的嵌套对象的索引类型

Reactjs 基于类型的嵌套对象的索引类型,reactjs,typescript,Reactjs,Typescript,关于这个话题,已经有了一些答案,但似乎都过时了。我想根据给定的类型选择一个组件。我更喜欢使用typeof自动生成对象的类型。声明Comp组件类型的正确方法是什么 const icons = { default: { coffee: IconCoffee, }, service: { coffee: IconCoffeeService, }, } as const; const Comp = icons[iconSet][iconName]; 当前,出现以下错

关于这个话题,已经有了一些答案,但似乎都过时了。我想根据给定的类型选择一个组件。我更喜欢使用
typeof
自动生成对象的类型。声明
Comp
组件类型的正确方法是什么

const icons = {
  default: {
    coffee: IconCoffee,
  },
  service: {
    coffee: IconCoffeeService,
  },
} as const;


const Comp = icons[iconSet][iconName];

当前,出现以下错误:
类型“string”不能用于索引类型

默认情况下,对象文本的类型是编码的确切对象类型,而不是字典或TS调用的类型。要索引到具有任意字符串的对象文字,我们需要将其类型显式声明为记录,在本例中为嵌套记录:

const图标:
记录>
= { ... }
声明常量iconSet:string;
声明常量iconName:string;
const Comp=图标[iconSet][iconName];

真正的问题是
图标的类型应该是什么,而不是推断的对象类型。说它的类型是
icons:Record
正确吗?你必须断言
iconSet
iconName
是常量字符串,也许当你声明它们时,你可以写
const-iconSet:'default'|'service'
或将它转换为常量字符串,比如
icons[iconSet为'service'][iconName为'coffee']
@concat,这似乎是正确的答案。由于该选择器根据给定的API响应选择图标,因此这将是该用例的正确类型<代码>常量图标:记录>