effect_tw
@effect_tw

Как проверить тип параметров ф-ции?

Тип для методов объекта - AuthFormsType

type AuthFormsType = {
  [s:string] : (props:FormPropsType | {path:string})=>React.ReactNode;
}


Тип использующийся для описания пропсов методов объекта - FormPropsType

export type FormPropsType = {
  formName:string;
  onSubmit:ReturnType<typeof submitHandlersCreator>;
  changeFormStateHandler:ReturnType<changeFormStateHandlerType>;
}


Сам объект

const authForms:AuthFormsType = {
  login:(props) =>{
    if(props === typeof FormPropsType ){
      return <Login 
      formName={props.fromName} 
      onSubmit={props.onSubmit} 
      changeFormStateHandler={props.changeFormStateHandler}
      />
    } 
    return <Login path={props.path} />
  },

Мне нужно сделать проверку какой тип у пропсов и в зависимости от того какой тип отдавать тот или иной компонент?
Какие есть возможные варианты проверки типов пропсов?
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Типов нет в рантайме, так что нужно проверять по тому что есть, например написать примерно такой тайпгвард:
const isFormPropsType = (v: FormPropsType | {path: string}): v is FormPropsType => typeof (v as FormPropsType).formName === 'string';

И соответственно использовать его для проверки:
const authForms:AuthFormsType = {
  login:(props) =>{
    if(isFormPropsType(props)){
      return <Login 
      formName={props.fromName} 
      onSubmit={props.onSubmit} 
      changeFormStateHandler={props.changeFormStateHandler}
      />
    } 
    return <Login path={props.path} />
  },

Хотя подозреваю, что можно гораздо проще сделать в данном случае:
const authForms:AuthFormsType = {
  login:(props) => {
    return <Login {...props} />
  },
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы