В определениях типа для react-final-form
он определяет children
в RenderableProps
(который расширяется FormProps
) как:
export interface RenderableProps<T> {
children?: ((props: T) => React.ReactNode) | React.ReactNode;
component?: React.ComponentType<T> | string;
render?: (props: T) => React.ReactNode;
}
Так что children
- это либо функция, которая принимает props
и создает React.ReactNode
, либо это экземпляр React.ReactNode
напрямую. В последнем случае вы не можете использовать его как функцию. Поскольку это может быть любой из них, TS позволит вам делать то, что является общим между ними. Ошибка Cannot invoke an expression whose type lacks a call signature.
в основном говорит: «Вы пытаетесь использовать children
, как будто это функция, и это недопустимо, потому что я точно не знаю, является ли она функцией».
Я не знаю библиотеку react-final-form
достаточно хорошо, чтобы сказать, как лучше всего это исправить. Вы могли бы разыграть ...
(children as ((props: T) => React.ReactNode))(renderRest);
... или вы можете добавить охрану типа ...
if (typeof children === 'function') {
children(renderRest);
}