Я створив простий <If />
функціональний компонент за допомогою 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;
}
Це дозволяє мені писати чистіший код, наприклад:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
У більшості випадків це працює добре, але коли я хочу перевірити, наприклад, чи не визначена дана змінна, а потім передати її як властивість, це стає проблемою. Наведу приклад:
Скажімо, у мене є компонент, <Animal />
який називається, має такі реквізити:
interface AnimalProps {
animal: Animal;
}
і тепер у мене є ще один компонент, який надає такий 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>
);
Як я коментував, що насправді тварина не визначена, я не можу сказати Typescript, що я це вже перевірив. Твердження animal!
працювало б, але це не те, що я шукаю.
Будь-які ідеї?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
, спрацює