【发布时间】:2019-08-22 23:29:04
【问题描述】:
我有一个案例,我想明确地将 React.FC 的子组件限定为特定类型,覆盖默认值:React.ReactNode.
目的是我正在创建一个小库,并且我希望出现编译时错误,这会告诉用户他只能将特定组件类型用作父组件的子组件。
OK 示例如下:
<MainComponent>
<ChildComponent>
</MainComponent>
失败的例子是:
<MainComponent>
<Route ...>
<ChildComponent>
</MainComponent>
- 这应该会失败,因为 Route 组件不是
ChildComponent并且检查失败。
React.FC 中的默认子属性源自:
interface FunctionComponent<P = {}> {
(props: PropsWithChildren<P>, context?: any): ReactElement | null;
propTypes?: WeakValidationMap<P>;
contextTypes?: ValidationMap<any>;
defaultProps?: Partial<P>;
displayName?: string;
}
type PropsWithChildren<P> = P & { children?: ReactNode };
我尝试过的是这样的:
Omit<React.FC, 'children'> & {
children: ChildComponent | ChildComponent[];
}
但是我只能得到React.ReactNode 或我的孩子和React.ReactNode 的联合。
我似乎无法弄清楚如何覆盖该道具以仅显式地将我的类型用于该道具。
我正在使用 Typescript 3.5.3 和 Omit / Extend ... 现在已成为标准 TS 库的一部分。
【问题讨论】:
标签: reactjs typescript