Tipagem Typescript

Olá, estou com uma dúvida de tipagem:

import Input from '../Components/Input'


const GetInputs = (type: string) =>
  ({
    input: <Input />
  }[type])

function Builder(type: string) {
  const Inputs = GetInputs(type)

  return <Inputs type={type} />
}

export default Builder

Eu tipei da seguinte forma, porém ele me dá erro no componente , JSX element type ‘Inputs’ does not have any construct or call signatures.

Alguém consegue me ajudar nisso?

Precisei deixar o any aqui, pq ele não vai retornar um componente exatamente… tanto que o retorno pode ser undefined.

const getInputs = (type: string): JSX.Element | any => ({
    input: <Input/>
}[type])

Vc estava tentando chamar um objeto e colocar ele dentro de um componente <Inputs/>, mas isso não tem como funcionar, pq o retorno de getInputs é um objeto.

Tente dar um console.log(inputs), pra ver o tanto de coisa que retorna.

const BuilderComponent = ({type}: { type: string }) => {
    const inputs = getInputs(type);
    if (inputs) return {...inputs}

    return null
}

Esse return null, é pra caso o componente que vc esteja tentando chamar não exista e aí a aplicação não vai quebrar e nem mostrar algo que você não quer.


Exemplo de uso:

<BuilderComponent type={"input"}/>

{/*Como não existe o type button*/}
{/*O componente abaixo não vai retornar nada*/}
<BuilderComponent type={"button"}/>
1 curtida