LibraryManagedAttributes不映射元素类型

时间:2018-09-22 06:57:12

标签: reactjs typescript definitelytyped

我有以下内容:

interface LayoutProps {
  children: React.ReactNode;
}

type LayoutComponent = React.ComponentType<LayoutProps>;

interface RootProps {
  Layout?: LayoutComponent;
}

class Root extends React.Component<RootProps> {
  static defaultProps: Pick<RootProps, 'Layout'> = {
    Layout: ({ children }: { children: React.ReactNode }) => <>{children}</>
  };

  render() {
    const { Layout, children } = this.props;
    return (
      <Layout>  // when optional errors with JSX element type 'Layout' does not have any construct or call signatures.
        {children}
      </Layout>
    );
  }
}

ReactDOM.render(<Root>Foobar</Root>, document.getElementById('mount-node'));

打字稿并没有发现defaultProp中有一个Layout的事实,我认为这是由于新的LibraryManagedAttributes映射类型所致。

我正在使用@types/react@16.4.14和打字稿3.0.3

当我认为整个点都是defaultProp时,Typescript抱怨Layout无法被调用。

如果我添加此代码,那就可以了:

  render() {
    const { Layout, children } = this.props;

    if (!Layout) {
      return null;
    }

    return <Layout>{children}</Layout>;
  }

我将strictNullChecks设置为true。

0 个答案:

没有答案