ریاکتجیاس - نوع بازگشتی تابع چیست که بتواند نوع null را مدیریت کند؟
من در تلاش برای پیادهسازی رندرینگ شرطی در تایپاسکریپت هستم و در حال حاضر وقتی null به عنوان جایگزین استفاده میشود، پیام خطای زیر را دریافت میکنم
نوع 'Element | null' قابل انتساب به نوع 'Element' نیست. نوع 'null' قابل انتساب به نوع 'ReactElement
پس اگر من JSX.Element را حذف کنم، تایپاسکریپت بابت نوع بازگشتی تابع هشدار میدهد. گزینه دیگر این است که null را با (<></>) جایگزین کنیم. این کار جواب میدهد اما جایی خواندهام که این در DOM فضای اضافی میگیرد، بنابراین null راه حل بهتری است. پس آیا نوع بازگشتی تابعی وجود دارد که بتواند null را مدیریت کند یا رویکرد جایگزینی برای این وجود دارد؟
export const ContextPanel = ({
children,
}: React.PropsWithChildren<LayoutContextInterface>): JSX.Element => {
const context = React.useContext(LayoutContext);
return context.contextPanelOpen ? (
<div className={styles.contextPanelWidth}>{children}</div>
) : null;
};
پاسخ شماره ۱
من پیشنهاد میکنم به جای آن از نوع FunctionComponent استفاده کنید (برای جزئیات در مورد اینکه نوع بازگشتی درست چیست، اگر میخواهید خودتان آن را بهصورت دستی تایپ کنید، آن را بررسی کنید).
export const ContextPanel: React.FunctionComponent = ({
children
}) => {
const context = React.useContext(LayoutContext);
return context.contextPanelOpen ? (
<div className={styles.contextPanelWidth}>{children}</div>
) : null;
};
برای مرجع، در اینجا تعریف رابط FunctionComponent در زمان نوشتن این پاسخ آمده است. برای نسخه بهروز، به لینک مراجعه کنید.
interface FunctionComponent<P = {}> {
(props: PropsWithChildren<P>, context?: any): ReactElement<any, any> | null;
propTypes?: WeakValidationMap<P> | undefined;
contextTypes?: ValidationMap<any> | undefined;
defaultProps?: Partial<P> | undefined;
displayName?: string | undefined;
}
توجه داشته باشید که نوع بازگشتی در اینجا ReactElement<any, any> | null است. من حدس میزنم پاسخ اصلی شما کار میکرد اگر فقط بازگشت خود را به درستی با JSX.Element | null تایپ میکردید، اما در کل این تایپ احتمالاً دقیقتر است.
