Получение generic-типа

204
20 августа 2017, 07:13

Есть нижеприведённый код. Код пытается сделать класс для создания обработчиков React-компонента

import * as React    from 'react'
import { Component } from 'react'
type PropTypes = {
    str: string
}
// Класс компонента
class MyComponent extends Component<PropTypes> {
    handlers: Handlers
    constructor(props) {
        super(props)
        this.handlers = new Handlers(this)
    }
    public render() {
        return <div onClick={this.handlers.onClick}/>
    }
}
// Абстрактный класс для создания классов с обработчиками
abstract class HandlersCreator<C extends Component> {
    props: Pick<C, 'props'> // Пытаемся присвоить тип «props». 
    // Как-то нужно здесь использовать PropTypes, полученный из «C»
    constructor(public component: Readonly<C>) {
        // Тут происходит ругань, что нельзя присвоить, ибо типы 
        // 'C["props"]' и 'Readonly<{ children?: ReactNode }> & Readonly<{}>'
        // несовместимы
        this.props = component.props
    }
}
// Класс с обработчиками
class Handlers extends HandlersCreator<MyComponent> {
    constructor(component: MyComponent) {
        super(component)
        // Тут тоже ошибка
        // Property 'str' does not exist on type 'Pick<MyComponent, "props">'
        console.log(this.props.str)
    }
    public onClick() {
        // Тут колдунство для клика
    }
}

Требуется в HandlerCreator'е получить тип свойства «props» реакт-компонента. Я полагаю, его нужно как-то получить из generic'а C. Напрямую использовать PropTypes нельзя. Как быть?

Answer 1

Всё оказалось намного проще, чем я думал:

interface HandlersCreator<C extends Component> {
    props: C['props']
}
READ ALSO
Передать значение чекбокс с пробелом

Передать значение чекбокс с пробелом

Здравствуйте! проблема такая как передать значение чекбокса если это значение с пробелом :

572
В каких случаях используется new FormData() при отправке данных с формы?

В каких случаях используется new FormData() при отправке данных с формы?

В каких случаях используется FormData ( const formData = new FormData();) при отправке данных с формы POST запросомможно просто же отправить в body данные с формы

215
Калькулятор с условиями для сайта

Калькулятор с условиями для сайта

ЗдравствуйтеПомогите, пожалуйста, реализовать условия вывода результата на сайте при вводе чисел

222