【问题标题】:Typescript on React HOCReact HOC 上的打字稿
【发布时间】:2019-06-12 11:28:29
【问题描述】:

我有一个结构如下的 React HOC:

import React from 'react';
import { CookiesConsumer } from './index';

const withCookies = (WrappedComponent: any) => (props: any) => (
  <CookiesConsumer>
    {cookies => (
      <WrappedComponent
        {...props}
        cookiesContext={cookies}
      />
    )}
  </CookiesConsumer>
);

export default withCookies;

我收到了 2 个我想修复的 Typescript eslint 警告。两者都在any 类型声明中:

Unexpected any. Specify a different type.eslint(@typescript-eslint/no-explicit-any)

对于props类型,我不知道props对象中可能有哪些属性或值类型,那么如何定义它比any更好呢?

对于WrappedComponent 类型,我尝试过ReactNodeReactElement 之类的类型,但在实际使用JSX element type 'WrappedComponent' does not have any construct or call signatures. 时会引发新错误

【问题讨论】:

    标签: javascript reactjs typescript eslint


    【解决方案1】:
    import React from 'react';
    import { CookiesConsumer } from './index';
    
    interface withCookiesProps {
        someProp: boolean;
      }
    
    
    const withCookies = <P extends object>(WrappedComponent: React.ComponentType<P>) => (props: P & withCookiesProps) => (
      <CookiesConsumer>
        {cookies => (
          <WrappedComponent
            {...props}
            cookiesContext={cookies}
          />
        )}
      </CookiesConsumer>
    );
    
    export default withCookies;
    

    Refernence

    【讨论】:

    • 感觉我 95% 都在这方面,但有点挣扎,因为你给出的例子有点不同。你能提供一个像我的组件一样未知道具的例子吗?
    • 如果可以,请告诉我,如果不行,我会再次检查。
    • 好的,我想我们到了!我的示例没有任何用于 withCookies 的道具,因此我将其从您的示例中删除,但其余部分似乎消除了现有错误。
    猜你喜欢
    • 2020-02-16
    • 2019-12-16
    • 2019-08-10
    • 2013-12-29
    • 2017-09-02
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多