【发布时间】:2022-01-08 00:32:46
【问题描述】:
我想要一个变量(实际上是函数参数,但我简化了问题),它可以容纳必须具有的 React 组件,例如aNumber: number 在它的属性中。
我不成功的尝试是:
function MyComp(props: { aNumber: number, aString: string }) {
return <>{props.aNumber} {props.aString}</>;
}
let f2: FunctionComponent<{ aNumber: number }> = MyComp;
给我错误:
Type '(props: { aNumber: number; aString: string; }) => Element' is not assignable to type 'FunctionComponent<{ aNumber: number; }>'.
Types of parameters 'props' and 'props' are incompatible.
Property 'aString' is missing in type 'PropsWithChildren<{ aNumber: number; }>' but required in type '{ aNumber: number; aString: string; }'.ts(2322)
FunctionComponent 在 react 中定义为:
interface FunctionComponent<P = {}> {
(props: PropsWithChildren<P>, context?: any): ReactElement<any, any> | null;
propTypes?: WeakValidationMap<P>;
contextTypes?: ValidationMap<any>;
defaultProps?: Partial<P>;
displayName?: string;
}
我不明白这个错误。如果我定义了一个带有约束的 var 以具有 aNumber,并且我为它分配了一个更丰富的元素 => 为什么它不开心?为什么它抱怨那些“更丰富”的属性?
当然,以下工作:
let f1: FunctionComponent<any> = MyComp;
通常,当我在 TS 中尝试高级打字构造时,我终于在经历了很多头痛之后让它工作了。这次好像不是很高级,但我没弄明白。
非常感谢。
【问题讨论】:
-
这样定义函数:
function MyComp(props: { aNumber: number, aString: string | undefined }) {return <>{props.aNumber} {props.aString}</>;}
标签: reactjs typescript typescript-generics