【发布时间】:2018-05-21 12:02:31
【问题描述】:
在 Typescript+React 中。我有两个组件(模块),它们具有通过接口指定的特定类型。此外,我还有一个父组件,它接受一个数组,其中一个联合指定为道具。
子组件:
模块一
interface IModuleOneProps {
moduleOneSpecificProp: string;
module_type: sting;
commonProp: string;
}
const ModuleOne: React.SFC<IModuleOneProps> = props => {
return (
<p>{moduleOneSpecificProp + " " + commonProp}</p>
);
};
export default ModuleOne;
模块二
interface IModuleTwoProps {
moduleTwoSpecificProp: string;
module_type: sting;
commonProp: string;
}
const ModuleTwo: React.SFC<IModuleTwoProps> = props => {
return (
<p>{moduleTwoSpecificProp + " " + commonProp}</p>
);
};
export default ModuleTwo;
包含模块数组的容器组件,可以是两种类型:
interface IContainerModuleProps {
modules: Array<
IModuleOneProps | IModuleTwoProps
>;
}
class ContainerModule extends React.Component<IContainerModuleProps> {
public render() {
const module = this.props.modules[1];
switch (module.module_type) {
case 'module_one':
return <ModuleOne {...module} />;
case 'module_two':
return <ModuelTwo {...module} />;
}
}
}
但是 TypeScript 不会让我在渲染组件时传播 module。它抱怨类型。
Type '{ commonProp: string; moduleOneSpecificProp: string; }' is not assignable to type 'IntrinsicAttributes & IModuleOneProps & { children?: ReactNode; }'.
Type '{ commonProp: string; moduleTwoSpecificProp: string; }' is not assignable to type 'IntrinsicAttributes & IModuleOneProps & { children?: ReactNode; }'.
Property 'moduleOneSpecificProp' is missing in type '{ commonProp: string; moduleTwoSpecificProp: string; }'.
有没有我在这里看不到的快速修复?还是必须先重建 prop 对象 (module),然后再将其传递给子组件?
【问题讨论】:
-
module_type属性如何定义? -
@AlekseyL。抱歉,刚刚将其添加到接口中。这是在基于 api 调用的早期函数中填充的。
-
我刚刚设法解决了这个问题。基于stackoverflow.com/questions/42156270/…。我会尽快写出我的解决方案。编辑:提香打败了我!
标签: javascript reactjs typescript ecmascript-6