我想将以下函数包装在mobx的observer()
中,但似乎无法弄清楚如何做到这一点(或者如果可能的话),同时又保持了通用类型:
interface GenericProps<T> {
arg: T;
}
const foo: <T>(props: GenericProps<T>) => T = (props) => props.arg;
这是全局导出的函数,因此(我认为)不能使用@observer
装饰器,我需要使用mobx-lite-react的observer()
函数。
我想要的是类似的东西
interface GenericProps<T> {
arg: T;
}
const foo = observer<T>((props: GenericProps<T>) => props.arg);
可能与https://github.com/mobxjs/mobx-react-lite/issues/243有关,但是从对话中我不清楚我将如何实现我的情况下的通用观察器。
答案 0 :(得分:1)
React.FunctionComponent
界面const foo_1: <T>(props: GenericProps<T>) => React.ReactElement | null = (props) => <>{JSON.stringify(props.arg)}</>;
const foo_2: <T>(props: GenericProps<T>) => React.ReactElement | null = observer((props) => <>{JSON.stringify(props.arg)}</>);
extends unknown
,它告诉编译器这是通用定义而不是JSX标记,因此不需要指定返回类型,因为推断)const foo_3 = observer(<T extends unknown>(props: GenericProps<T>) => <>{JSON.stringify(props.arg)}</>);
答案 1 :(得分:0)
这就是你想要的吗?
interface GenericProps<T> {
arg: T
}
const foo = <T extends IReactComponent>(props: GenericProps<T>) => observer(props.arg)
我不太了解,因为在第一个示例中您具有返回另一个函数的函数,但是在第二个示例中,您只是将函数传递给observer
,但由于观察者仅接受扩展{{ 1}}