J'ai créé un <If />
composant fonctionnel simple en utilisant 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;
}
Cela me permet d'écrire un code plus propre, tel que:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
Dans la plupart des cas, cela fonctionne bien, mais lorsque je veux vérifier, par exemple, si une variable donnée n'est pas définie, puis la passer en tant que propriété, cela devient un problème. Je vais donner un exemple:
Disons que j'ai un composant appelé <Animal />
qui a les accessoires suivants:
interface AnimalProps {
animal: Animal;
}
et maintenant j'ai un autre composant qui rend le DOM suivant:
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>
);
Comme je l'ai commenté, bien que l'animal ne soit pas défini, je n'ai aucun moyen de dire à Typescript que je l'ai déjà vérifié. L'affirmation de animal!
fonctionnerait, mais ce n'est pas ce que je recherche.
Des idées?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
- être que