Hice un <If />
componente de función simple usando React:
import React, { ReactElement } from "react";
interface Props {
condition: boolean;
comment?: any;
}
export function If(props: React.PropsWithChildren<Props>): ReactElement | null {
if (props.condition) {
return <>{props.children}</>;
}
return null;
}
Me permite escribir un código más limpio, como:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
En la mayoría de los casos, funciona bien, pero cuando quiero verificar, por ejemplo, si una variable dada no está definida y luego pasarla como propiedad, se convierte en un problema. Daré un ejemplo:
Digamos que tengo un componente llamado <Animal />
que tiene los siguientes accesorios:
interface AnimalProps {
animal: Animal;
}
y ahora tengo otro componente que representa el siguiente DOM:
const animal: Animal | undefined = ...;
return (
<If condition={animal !== undefined} comment="if animal is defined, then present it">
<Animal animal={animal} /> // <-- Error! expected Animal, but got Animal | undefined
</If>
);
Como comenté, aunque de hecho animal no está definido, no tengo forma de decirle a Typecript que ya lo he comprobado. La afirmación de animal!
funcionaría, pero eso no es lo que estoy buscando.
¿Algunas ideas?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
funcionaría