Ich habe <If />mit React eine einfache Funktionskomponente erstellt:
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;
}
Damit kann ich einen saubereren Code schreiben, wie zum Beispiel:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
In den meisten Fällen funktioniert es gut. Wenn ich jedoch beispielsweise überprüfen möchte, ob eine bestimmte Variable nicht definiert ist, und sie dann als Eigenschaft übergeben möchte, wird dies zu einem Problem. Ich werde ein Beispiel geben:
Angenommen, ich habe eine Komponente <Animal />mit den folgenden Requisiten:
interface AnimalProps {
animal: Animal;
}
und jetzt habe ich eine andere Komponente, die das folgende DOM rendert:
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>
);
Wie ich kommentierte, obwohl Tier tatsächlich nicht definiert ist, kann ich Typescript nicht sagen, dass ich es bereits überprüft habe. Die Behauptung von animal!würde funktionieren, aber das ist nicht das, wonach ich suche.
Irgendwelche Ideen?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}würde es funktionieren