Saya membuat <If />
komponen fungsi sederhana menggunakan 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;
}
Ini memungkinkan saya menulis kode pembersih, seperti:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
Dalam kebanyakan kasus, ini berfungsi dengan baik, tetapi ketika saya ingin memeriksa misalnya jika variabel yang diberikan tidak didefinisikan dan kemudian meneruskannya sebagai properti, itu menjadi masalah. Saya akan memberi contoh:
Katakanlah saya memiliki komponen bernama <Animal />
yang memiliki Alat Peraga berikut:
interface AnimalProps {
animal: Animal;
}
dan sekarang saya memiliki komponen lain yang membuat DOM berikut:
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>
);
Seperti yang saya komentari, walaupun sebenarnya hewan tidak didefinisikan, saya tidak punya cara untuk mengatakan bahwa saya sudah memeriksanya. Pernyataan animal!
akan berhasil, tapi bukan itu yang saya cari.
Ada ide?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
akan berhasil