styled-компоненты с темой HOC, не работающей с типами React.FC - PullRequest
1 голос
/ 24 октября 2019

Я создаю некоторые компоненты с помощью машинописи React.FC, и сегодня я обнаружил эту ошибку машинописи при попытке ввести реквизиты стилевых компонентов, используя withTheme HOC из стилевых компонентов:

enter image description here

Кажется, что withTheme HOC принимает только React.ComponentType в качестве параметра, но компонент был построен с использованием React.FC (функциональный компонент).

Есть ли способ приведенияReact.FC до React.ComponentType?

ОБНОВЛЕНИЕ

Полная реализация компонента:

import React, { useEffect } from 'react'
import PropTypes from 'prop-types'
import { Reset, LoadingBarStyled, SpinnerContainer } from './Style'
import { withTheme } from 'styled-components'
import ScaleLoader from 'react-spinners/ScaleLoader'

export interface ILoadingBarComponent {
    progress: number
    appearance?: string
    onFinish(finished: Promise<string>): void
}

const LoadingBarComponent: React.FC<ILoadingBarComponent> = ({
    progress = 0,
    appearance = 'default',
    onFinish
}) => {
    useEffect(() => {
        if (progress >= 100 && onFinish) {
            onFinish(
                new Promise((resolve, reject) => {
                    setTimeout(() => {
                        resolve('finished')
                    }, 800)
                })
            )
        }
    }, [progress, onFinish])
    return (
        <div className="loading-bar-component-module">
            <Reset />
            {progress > -1 && progress < 101 && (
                <>
                    <LoadingBarStyled progress={progress} appearance={appearance} />
                    <SpinnerContainer progress={progress}>
                        <ScaleLoader height={10} />
                    </SpinnerContainer>
                </>
            )}
        </div>
    )
}

LoadingBarComponent.propTypes = {
    progress: PropTypes.number.isRequired,
    appearance: PropTypes.string,
    onFinish: PropTypes.func.isRequired
}
export default withTheme(LoadingBarComponent)

1 Ответ

2 голосов
/ 24 октября 2019

Вам необходимо добавить theme реквизит в интерфейс компонентов вашего реквизита:

interface Theme {}

export interface ILoadingBarComponent {
  progress: number
  appearance?: string
  onFinish(finished: Promise<string>): void
  theme: Theme
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...