代码之家  ›  专栏  ›  技术社区  ›  dagda1

typescript 3.0和react defaultProps

  •  0
  • dagda1  · 技术社区  · 6 年前

    如果我有这样一个道具定义:

    interface Props {
      Layout?: LayoutComponent;
    }
    

    如果我在 ClassComponent

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

    Typescript不接受不能未定义的事实:

    render() {
        const { previousLocation, data } = this.state;
        const { location, Layout } = this.props;
        const initialData = this.prefetcherCache[location.pathname] || data;
    
        return (
          <Layout> // JSX element type 'Layout' does not have any construct or call signatures.
            <Switch>
    

    它永远不应该因为 defaultProps . Typescript不接受这个。

    有没有办法让编译器知道它不能是未定义的?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Aleksey L.    6 年前

    热释光;DR不定义 Layout

    内部 布局 prop不应该是可选的,因为它总是由于 defaultProps

    interface Props {
      Layout: LayoutComponent;
    }
    

    LibraryManagedAttributes

    这个helper类型定义了组件的Props类型上的一个转换,然后使用它来检查以它为目标的JSX表达式;因此允许定制,比如:如何处理提供的道具和推断的道具之间的冲突,如何映射推断,如何处理可选性,以及如何组合来自不同位置的推断