如何使用非 OOP 方法对 MobX 可观察对象进行类型注释?
请考虑这个例子:
import { observable } from "mobx";
interface MyObject {
name: string;
age: number;
}
const obj1 = { namee: "Uldis", age: "35" };
type MyObjectObservable = ???;
const obj1Observable: MyObjectObservable = observable(obj1); // I want to have compiler error here
function doStuff(obj: MyObjectObservable) {}
doStuff({ name: "Uldis", age: 35 }) // I want to have compiler error here because passed object is not an observable
MyObjectObservable
的类型应该如何定义?我希望拥有尽可能严格的类型,并且不想使用 OOP 方法,因为存在其他类型相关问题,例如方法使用的状态没有精确的子类型。
Please, consider this example:
import { observable } from "mobx";
interface MyObject {
name: string;
age: number;
}
const obj1 = { namee: "Uldis", age: "35" };
type MyObjectObservable = ???;
const obj1Observable: MyObjectObservable = observable(obj1); // I want to have compiler error here
function doStuff(obj: MyObjectObservable) {}
doStuff({ name: "Uldis", age: 35 }) // I want to have compiler error here because passed object is not an observable
How should type for MyObjectObservable
be defined? I want to have as strict types as possible and I don't want to use OOP approach because of other type related issues such as not having precise subtypes for the state that methods use.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 observable 或 makeObservable 时,Typescript 中不应出现错误,
这是所有有效的代码:
There should be no error in Typescript when using
observable
ormakeObservable
This is all valid code:
我看到两种可能的解决方案:
Observable
类型,以避免使用额外的对象进行包装。I see two possible solutions:
Observable
type in order to avoid wrapping with an additional object.仔细研究后,我想出了这个解决方案:
TS 游乐场
After looking at this more closely I've came up with this solution:
TS Playground