es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando una propiedad clave de un objeto en TypeScript

Aquí hay un componente:

import { useAppSelector } from “../../hooks”;
import IUser from “../../models/user”;

const Header: FC = () => {
const [btn, setBtn] = useState(false);
const user: IUser | null = useAppSelector( state => state.user );

const btn_click = () => {
    setBtn(!btn);
}
console.log(user, "user"); // consoles.log( { _id: 2452345, name: "Eldar" } )

return(
        <div>
        { user ? 
            <button className={ style.header__button } }> { user.name } </button> :
            <button className={ style.header__button } onClick={ () => btn_click() }> Reg </button> }
        { btn && <ModalWrapper>
                    <SignIn/>
                </ModalWrapper> }
    </div>
)

}

export default Header

Me encanta TypeScript, pero cuando termino con esos errores, me vuelvo loco. Básicamente, dependiendo de un usuario, quiero poner este o aquel botón. Por lo tanto, hay un usuario?, entonces en un botón donde el usuario ha iniciado sesión, quiero poner el nombre de los usuarios, pero me da un error como

Property ‘name’ does not exist on type ‘never’

Debería funcionar de cualquier manera si hay un usuario o no, pero incluso si hay un usuario, me da este error.

modelo de usuario a continuación

export default interface IUser {
_id: string,
name: string
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error probablemente se debe al hecho de que la variable user no está siendo correctamente verificada para el tipo. La variable user está declarada como tipo IUser | null, pero se está accediendo a la propiedad user.name sin comprobar primero si user no es null. Para solucionar esto, se puede agregar una verificación para asegurarse de que user no sea null antes de acceder a la propiedad name:

    return(
        <div>
            { user ? 
                <button classname="{" style.header__button="" }="" }=""> { user && user.name } </button> :
                <button classname="{" style.header__button="" }="" onclick="{" ()=">" btn_click()="" }=""> Reg </button> }
            { btn && <modalwrapper>
                        <signin></signin>
                    </modalwrapper> }
        </div>
    )
    

Comments are closed.