javascript - 使用可选属性扩展 TypeScript 类型
问题描述
我正在使用 NextJS,需要AppProps
使用我自己添加的可选参数来扩展它们的类型Layout
。然而,该AppProps
类型由许多其他类型组成,例如
应用道具:
export declare type AppProps<P = {}> = AppPropsType<Router, P>;
应用道具类型:
export declare type AppPropsType<R extends NextRouter = NextRouter, P = {}> = AppInitialProps & {
Component: NextComponentType<NextPageContext, any, P>;
router: R;
__N_SSG?: boolean;
__N_SSP?: boolean;
};
下一个组件类型:
export declare type NextComponentType<C extends BaseContext = NextPageContext, IP = {}, P = {}> = ComponentType<P> & {
/**
* Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.
* Make sure to return plain `Object` without using `Date`, `Map`, `Set`.
* @param ctx Context of `page`
*/
getInitialProps?(context: C): IP | Promise<IP>;
};
从我的角度来看,我_app.tsx
希望能够添加Layout
以下Component
内容:
Component: {
Layout?: React.FunctionComponent;
};
有没有办法做到这一点,AppProps
或者我需要先扩展/相交AppPropsType
,Layout
然后重新声明我自己的AppProps
使用扩展的AppPropsType
?
解决方案
我创建了一个自定义 AppProps Next 类型,这样我就可以编辑该Component
类型。
interface CustomAppProps extends Omit<AppProps, "Component"> {
Component: AppProps["Component"] & { Layout: JSX.Element };
}
最终结果将如下所示:
import type { AppProps } from "next/app";
interface CustomAppProps extends Omit<AppProps, "Component"> {
Component: AppProps["Component"] & { Layout: JSX.Element };
}
function CustomApp({ Component, pageProps }: CustomAppProps) {
return <Component {...pageProps} />;
}
export default CustomApp;
推荐阅读
- javascript - 自定义缩略图 CKFinder 3,自定义文件类型
- java - 如何在 Spring Webflux 控制器上立即返回一个值然后进行额外处理?
- c# - 无法为 i18n 创建 resx 文件
- c# - WPF 播放 youtube 视频
- mysql - 选择逗号分隔字符串中的不同子字符串(第 2 部分)| mysql
- java - 如何将列出的值从数据库存储到 Anylogic 8.7.1 中的变量?
- javascript - CanvasJS 在函数中只显示一个图表(php、js)
- linux - 如何更换 EMC VNXe3150 上的操作系统?
- java - 打印带有顶部和左侧索引的二维数组
- c - 将system()函数的显示传递给一个fifo