Я использую машинопись и реагирую.
У меня есть родительский компонент с некоторой функцией и функцией визуализации по умолчанию. У меня есть 20 дочерних компонентов с переопределенной функцией и без рендеринга.
Я хотел бы, чтобы это работало =>
PARENT:
class Field<T> extends React.Component<T> {
state = { fieldMode : FieldMode.DISPLAY}
fieldEditMode() {
return (
<div>
</div>
)
}
fieldDisplayMode() {
return (
<div>
</div>
)
}
render() {
return (
this.state.fieldMode === FieldMode.DISPLAY ? this.fieldDisplayMode() : this.fieldEditMode()
)
}
}
export default Field;
Дочерний элемент:
export interface UserFieldProps extends FieldProps {
fieldId: string;
field: ItemDetailsField;
value: any;
}
class UserField extends Field<UserFieldProps> {
fieldEditMode() {
return (
<div>
EDITING :
UserField : {this.props.value}
</div>
)
}
fieldDisplayMode() {
return (
<div>
DISPLAYING :
UserField : {this.props.value}
</div>
)
}
render() {
return super.render();
}
}
Это прекрасно работает без использования реквизита, если я просто export default Field
смогу достичь того, чего хочу.
Но я бы хотел добавить опоры на стенд моего поля и моего ребенка
const mapStateToProps = (state: RootState) => ({
})
const mapDispatchToProps = {
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(Field as new(props: Field<T>) => Field<T>);
Проблема
Поскольку реквизиты ребенка могут измениться, мне нужно объявить детей следующим образом: class UserField extends Field<UserFieldProps> {
Но, если я это сделаю, янужно иметь общий Field<T>
Поэтому я попробовал следующее
export default connect(
mapStateToProps,
mapDispatchToProps
)(Field as new(props: Field<T>) => Field<T>);
Не могу найти имя 'T'
или
export default function FieldContainer<T>() {
return connect(
mapStateToProps, mapDispatchToProps
)(Field as new(props: ComponentProps<T>) => Field<T>);
}
Аргумент типа 'new (props: any) => Field' нельзя назначить параметру типа 'ComponentType>'
export default connect(
mapStateToProps,
mapDispatchToProps
)(Field);
Другой дочерний компонент будетне работает с
Базовый конструктор не имеет указанного числа аргументов типа. ts
Есть ли способ достичь этого?