reactjs - 如何键入带有非可选“children”的 React.FC?
问题描述
在编写 TypeScript (tsx) 时,我通常使用React.FC<Props>
(Or React.FunctionComponent<Props>
) 键入我的 React 组件,其中Props
是我自己的 prop 类型的接口。然后,打字系统将添加children?
到我的组件采用的道具列表中。
但这使得children
道具是可选的。
所以我们有React.VFC
没有子React.FC
组件的组件和具有可选子组件的组件。但是对于具有强制子级的组件,我可以使用什么?
我可以像这样手动完成,但我希望有一种更清洁的方法。
interface ParentFunctionComponent<P = {}> {
(props: PropsWithMandatoryChildren<P>, context?: any): ReactElement<any, any> | null;
propTypes?: WeakValidationMap<P>;
contextTypes?: ValidationMap<any>;
defaultProps?: Partial<P>;
displayName?: string;
}
type PropsWithMandatoryChildren<P> = P & { children: ReactNode };
解决方案
children
为道具添加非可选。
import React from 'react';
export interface Props {
children: React.ReactNode;
}
const Foo: React.FC<Props> = (props) => {
return <>{props.children}</>;
};
function Bar() {
return (
<>
{/*
<Foo /> error
<Foo></Foo> error
*/}
<Foo>hello</Foo>
<Foo>
<div>foo bar</div>
</Foo>
</>
);
}
推荐阅读
- python-3.x - ngx-socket-io 连接错误但 flask_socketio 日志显示 200 OK
- oracle - 如何在oracle中构建和执行程序
- angular - 使用 ABP 框架分离身份服务器
- postman - 是否可以删除“在便笺本中本地工作”。邮递员 8 中的警告?
- node.js - 我无法在 discord.js 中获得公会名称
- java - Spring Data JPA - 如何从 jar 中读取实体?- java.lang.IllegalArgumentException:不是托管类型
- nestjs - 如何使用存储库导出创建服务?
- haskell - 派生方式:无法派生良好的实例
- asp.net - Robots.txt 访问网站时显示的内容
- android - 将文件保存在共享外部存储的下载文件夹中