#reactjs #typescript
Вопрос:
Я пытаюсь описать входящие реквизиты для дочернего элемента, и я получаю следующую ошибку
Параметр «реквизит» неявно имеет тип «любой». ts(7006) (параметр) реквизит: любой
// Parent Element lt;GeneralButton icon={lt;TodayIcon /gt;} type='button' onClick={add} text={'add'} /gt; // Child element import React from 'react'; // MUI ****************************************************// import { makeStyles, createStyles, Theme } from '@material-ui/core/styles'; import { Button, Box } from '@material-ui/core'; import { SvgIconProps } from '@material-ui/core/SvgIcon'; const useStyles = makeStyles((theme: Theme) =gt; createStyles({ root: { 'amp; gt; *': { margin: theme.spacing(1), }, }, }) ); interface generalBtnPrpos { form?: string; disabled?: boolean; icon?: React.ReactElementlt;SvgIconPropsgt;; type: string; onClick: () =gt; void; text: string; } export default function GeneralButtonlt;generalBtnPrposgt;(props) { const classes = useStyles(); return ( lt;Box className={classes.root}gt; lt;Button form={props.form} disabled={props.disabled} type={props.type} onClick={props.onClick} startIcon={props.icon} variant='contained' color='primary'gt; {props.text} lt;/Buttongt; lt;/Boxgt; ); }
Ответ №1:
вы должны ввести в свой параметр props
код примерно так
interface generalBtnPrpos { form?: string; disabled?: boolean; icon?: React.ReactElementlt;SvgIconPropsgt;; type: string; onClick: () =gt; void; text: string; } export default function GeneralButtonlt;generalBtnPrposgt;(props: generalBtnPrpos) { .....
Комментарии:
1. любая идея, почему я получаю это сейчас, свойство «форма» не существует для типа «Реквизит».
2. Я передаю все так, как должен, теперь это говорит мне, что таких реквизитов нет, я хочу, чтобы некоторые реквизиты были необязательными в зависимости от каждого случая, так как я хочу использовать это в качестве общего btn
3. Проверьте мой ответ, это неправильный ответ. Вы также должны удалить определение универсального типа
lt;generalBtnPrposgt;
.
Ответ №2:
На самом деле вы никогда не вводите реквизиты в свой GeneralButton
компонент. Вы создаете универсальный вызываемый generalBtnPrpos
вместо использования созданного вами интерфейса, который называется generalBtnPrpos
.
Чтобы правильно ввести реквизит, вы можете добавить generalBtnPrpos
интерфейс после реквизита и удалить lt;generalBtnPrposgt;
созданный вами шаблон, так как вы его не используете:
export default function GeneralButton(props: generalBtnPrpos) { const classes = useStyles(); return ( lt;Box className={classes.root}gt; lt;Button form={props.form} disabled={props.disabled} type={props.type} onClick={props.onClick} startIcon={props.icon} variant='contained' color='primary'gt; {props.text} lt;/Buttongt; lt;/Boxgt; ); }