我有如下内容:
const activeFormDesign = {
fields: {
},
elements: {
},
groups: {
},
layouts: {
section: SectionLayout,
header: Header,
title: Title,
description: Description,
goal: Goal,
},
};
layouts
的每一个属性都是一个具有不同道具的功能组件。我的目标是,某人可以通过提供键来访问给定布局的FC,并且返回的FC将知道它应该具有哪些道具。
我想我可以这样做:
export function getLayoutTemplate(type: keyof typeof activeFormDesignTemplate['layouts']): FC<typeof activeFormDesignTemplate['layouts'][type] {
return activeFormDesignTemplate.layouts[type];
}
const Goal = getLayoutTemplate('goal');
<Goal />
参数类型工作得很好。但是返回类型会抛出一个错误,即"类型"不能用作索引类型。我的意思是……这是有道理的。我知道真正的动态类型是无法推断的。但是如果我静态地输入它,就像在getLayoutTemplate('goal')
中一样,我认为它可以。
我觉得有一种方法可以做到这一点,但我还没有完全弄清楚,并将感谢任何帮助!
假设SectionLayout
,Header
等已经是React.FC
类型,您只需要在K
上使函数泛型,并删除返回类型周围的React.FC
。
export function getLayoutTemplate<
K extends keyof typeof activeFormDesign["layouts"]
>(type: K): typeof activeFormDesign['layouts'][K] {
return activeFormDesign.layouts[type];
}
参数type
现在是K
类型,您可以使用K
来索引返回类型的typeof activeFormDesign['layouts']
。
SectionLayout
,Header
等转换成React.FC
如果它们是而不是类型的React.FC
游乐场