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.

Typescript + Emotion Styled no infiere el tipo del componente como un prop. En Typescript, cuando se utiliza la función `styled` de Emotion para estilizar un componente, es posible que no se infiera automáticamente el tipo del componente como un prop. Esto significa que si se intenta acceder a propiedades específicas del componente dentro del styled component, se pueden producir errores de tipos. Sin embargo, es posible solucionar este problema utilizando la función `PropsWithChildren`. Esta función envuelve el tipo del componente y asegura que los props pasados al styled component sean correctamente reconocidos y verificados por Typescript. Aquí hay un ejemplo de cómo se puede utilizar la función `PropsWithChildren` para inferir el tipo del componente como un prop en Typescript + Emotion Styled: “`tsx import React, { PropsWithChildren } from “react”; import { styled } from “@emotion/styled”; // Componente funcional type MyComponentProps = { myProp: string; }; const MyComponent: React.FC = ({ myProp }) => { return
{myProp}
; }; // Styled Component type StyledMyComponentProps = PropsWithChildren; const StyledMyComponent = styled(MyComponent)` color: red; `; // Uso del Styled Component const App: React.FC = () => { return ; }; “` En este ejemplo, hemos definido un componente funcional `MyComponent` con un prop `myProp`. Luego, hemos creado el `StyledMyComponent` utilizando la función `styled`, y hemos utilizado `PropsWithChildren` para envolver el tipo del componente como un prop. Finalmente, en el componente `App`, hemos utilizado el `StyledMyComponent` y le hemos pasado el prop `myProp` correctamente verificado por Typescript. Al utilizar `PropsWithChildren`, aseguramos que el tipo del componente sea inferido de manera correcta y evitamos posibles errores de tipos al acceder a propiedades específicas del componente dentro del styled component.

Tengo un componente de Botón simple.

Cuando lo uso, puedo pasar la propiedad “AS” de esta manera:

Pero cuando intento obtener la propiedad “href”, no funciona. Los tipos del elemento “Anchor” no se deducen y Typescript muestra un error diciendo que el atributo “href” no existe en este componente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón de este error es porque TypeScript está inferiendo las props basándose en el componente Button en lugar del elemento a. Para resolver este problema, puedes declarar manualmente la prop href en la interfaz del componente Button o usar una afirmación de tipo para indicarle a TypeScript que el componente debe ser tratado como un elemento a.

    Aquí tienes cómo puedes declarar manualmente la prop href en la interfaz:

    import { ButtonHTMLAttributes } from "react";
    
    interface ButtonProps extends ButtonHTMLAttributes<htmlbuttonelement> {
      href?: string;
    }
    
    const Button = styled.button<buttonprops>`
      // tus estilos aquí
    `;
    
    // uso
    <button as="a" href="https://example.com">Hola</button>
    

    Alternativamente, puedes usar una afirmación de tipo para indicarle a TypeScript que el componente debe ser tratado como un elemento a:

    const Button = styled.button`
      // tus estilos aquí
    `;
    
    // uso
    <button as="a" href="https://example.com" {...(null="" as="" any)}="">Hola</button>
    

    Al pasar null as any como las props spread, le estamos diciendo a TypeScript que ignore cualquier error de tipo y trate el componente como un elemento a.

    Cualquiera de los enfoques te permitirá pasar la prop href al componente Button.

Comments are closed.