type ReturnFCProps<T> = T extends React.FC<infer P extends { value: any, onChange: (props: any) => any }> ? P : never
type FormItemProps<C extends React.FC<any>, P extends ReturnFCProps<C>> = { getValueFromEvent: (...args: Parameters<P['onChange']>) => void, children: C }
const FormItem = <C extends React.FC<any>, P extends ReturnFCProps<C>>(props: FormItemProps<C, P>) => {
return <div>{React.createElement(props.children)}</div>
}
const MyComponent: React.FC<{ value: number, onChange: (e: React.ChangeEvent<HTMLInputElement>) => void }> = () => <></>
// Вот тут у event будет тип React.ChangeEvent и будет работать автодополнение
const Test = <FormItem getValueFromEvent={(event) => event.target.value}>{MyComponent}</FormItem>
data = json.dumps(carts, ensure_ascii=False).encode('utf8')
TypeError: 'encoding' is an invalid keyword argument for this function
import sys, codecs
with codecs.open('input.txt', 'w', encoding = 'utf-8') as out:
out.write( json.dumps(json_data, ensure_ascii=False))
"\\u0442\\u043e\\u0442\\u0435\\u043c \\u0436\\u0438\\u0437\\u043d\\u0438\"
внутри FormItem я просто прокидываю в children onChange и value, там примерно такое
В целом мой вопрос скорее про типизацию, мне интересно, можно ли сделать children-а, который ReactElement генериком и вытащить из него пропсы или нет. Довольно странно, если нельзя, так как под капотом у JSX просто функция createElement, а из функции точно можно
Но вообще, кажется, что лучший вариант в моем случае - это использовать render function