我正在为@expo/vector-icons
做一个高阶组件(HOC),并尝试定义它的属性的通用类型。模块中有几个图标源components
(MaterialCommunityIcons
,MaterialIcons
,FontAwesome
等),它们都有相同的形状,但都有唯一的字符类型的图标names
。
因此,HOC应该得到两个 prop :source component
和icon的name
,其思想是,当定义了component
时,name
属性应该推断出所选源的可用名称的适当列表。
const IconLibs = { MaterialCommunityIcons, MaterialIcons, FontAwesome };
type IconLibsNames = keyof typeof IconLibs;
type HocProps<Key extends IconLibsNames> = {
component: typeof IconLibs[Key];
name: React.ComponentProps<typeof IconLibs[Key]>["name"];
};
在我的结果中我看到,所有的names
都聚集在总列表中,并且它们都可用于每个源component
。如何正确地拆分它们?
如果有帮助的话,可以通过两种方式获取适当的component
的names
的文本类型(例如,"stop" | "forward" | "check" | "close" | "book" ...
):
1.
type name = React.ComponentProps<typeof MaterialIcons>["name"]
type name = keyof typeof MaterialIcons.glyphMap
1条答案
按热度按时间euoag5mw1#
我认为问题是您试图使用generic +
typeof
来推断名称。我建议使用更直接的方法: