当父组件向其子组件注入 props 时,如何在 Typescript 中定义 props?

Ram*_*zar 5 typescript reactjs tslint react-tsx

当组件克隆其子组件并向其注入 props 时,如何定义子组件的 props 类型?

我收到错误原因injectedProps预计在Child

const Parent: React.SFC<ParentProps> = ({ children }) => (
  <div>
    {React.cloneElement(children[0], { injectedProp: 'foo' })}
  </div>
);

const Child: React.SFC<ChildProps> = ({ injectedProp }) => (
  <div attr={injectedProp} />
);

type ChildProps = {
  injectedProp: string;
};
Run Code Online (Sandbox Code Playgroud)
<Parent>
  <Child />
</Parent>
Run Code Online (Sandbox Code Playgroud)

子项错误:injectedProp缺失

Mat*_*hen 2

这个代码模式无法在 TypeScript 中正确输入,而且如果你问我的话,它很丑陋。相反,考虑传递一个接受注入的 prop 并创建最终子元素的函数:

interface ParentProps {
  children: (childProps: ChildProps) => React.ReactNode;
}

const Parent: React.SFC<ParentProps> = ({ children }) => (
  <div>
    {children({ injectedProp: 'foo' })}
  </div>
);

const Child: React.SFC<ChildProps> = ({ injectedProp }) => (
  <div title={injectedProp} />
);

type ChildProps = {
  injectedProp: string;
};

function foo() {
  return <Parent>
    {childProps => <Child {...childProps} />}
  </Parent>
}
Run Code Online (Sandbox Code Playgroud)