Mobx Generic Observer 使用 Typescript 打字
Mobx Generic Observer using Typescript typing
我想在 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 有关,但从谈话中我不清楚我将如何在我的案例中实施通用观察者。
这是你想要的吗?
interface GenericProps<T> {
arg: T
}
const foo = <T extends IReactComponent>(props: GenericProps<T>) => observer(props.arg)
我不太明白,因为在第一个例子中你有函数 returns 另一个函数,但在第二个例子中你只是将函数传递给 observer
但这是不可能的,因为只有观察者接受扩展 IReactComponent
的东西
- 你的示例不是react组件,你需要匹配
React.FunctionComponent
接口
const foo_1: <T>(props: GenericProps<T>) => React.ReactElement | null = (props) => <>{JSON.stringify(props.arg)}</>;
- 添加观察者(由于 TS 3.4 或 3.5 的改进,这应该已经可以工作了)
const foo_2: <T>(props: GenericProps<T>) => React.ReactElement | null = observer((props) => <>{JSON.stringify(props.arg)}</>);
- 如果在旧的 TS 上你需要将类型声明移动到函数本身(注意
extends unknown
告诉编译器这是通用定义而不是 JSX 标签,return 类型不需要被指定,因为它将被推断)
const foo_3 = observer(<T extends unknown>(props: GenericProps<T>) => <>{JSON.stringify(props.arg)}</>);
我想在 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 有关,但从谈话中我不清楚我将如何在我的案例中实施通用观察者。
这是你想要的吗?
interface GenericProps<T> {
arg: T
}
const foo = <T extends IReactComponent>(props: GenericProps<T>) => observer(props.arg)
我不太明白,因为在第一个例子中你有函数 returns 另一个函数,但在第二个例子中你只是将函数传递给 observer
但这是不可能的,因为只有观察者接受扩展 IReactComponent
- 你的示例不是react组件,你需要匹配
React.FunctionComponent
接口
const foo_1: <T>(props: GenericProps<T>) => React.ReactElement | null = (props) => <>{JSON.stringify(props.arg)}</>;
- 添加观察者(由于 TS 3.4 或 3.5 的改进,这应该已经可以工作了)
const foo_2: <T>(props: GenericProps<T>) => React.ReactElement | null = observer((props) => <>{JSON.stringify(props.arg)}</>);
- 如果在旧的 TS 上你需要将类型声明移动到函数本身(注意
extends unknown
告诉编译器这是通用定义而不是 JSX 标签,return 类型不需要被指定,因为它将被推断)
const foo_3 = observer(<T extends unknown>(props: GenericProps<T>) => <>{JSON.stringify(props.arg)}</>);