Eu criei um <If />componente de função simples usando o 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;
}
Permite escrever um código mais limpo, como:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
Na maioria dos casos, funciona bem, mas quando quero verificar, por exemplo, se uma determinada variável não está definida e depois passá-la como propriedade, ela se torna um problema. Vou dar um exemplo:
Digamos que eu tenho um componente chamado <Animal />que possui os seguintes adereços:
interface AnimalProps {
animal: Animal;
}
e agora eu tenho outro componente que renderiza o seguinte 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 comentei, apesar de o fato de animal não estar definido, não tenho como dizer ao Typescript que já o verifiquei. A afirmação de animal!funcionaria, mas não é isso que estou procurando.
Alguma ideia?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}funcionaria