我为我的打字稿服务器 API 定义了接口,当通过 MobX 状态树定义模型时,我想确保打字稿编译器强制模型快照符合这些接口。
因此,如果一个附加属性被添加到IFoo
接口中,但没有添加到Foo
MST 模型中,那么最好让 typescript 在编译时抱怨它。
执行上述操作的最佳方法是什么?
我知道我可以从模型本身获得有效的打字稿接口:
type IFoo = typeof Foo.Type
我不想将此接口用于我的服务器 API,因为:
不希望在本质上处理快照(普通对象)的 API 接口中包含诸如等之
IObservable
类的东西。IComplexType
因此,派生的接口也具有用于不需要的操作的方法签名。
我曾尝试过类似的事情:
// IFoo is my server interface
const T = t.model("Foo", {...})
type IT = typeof T.Type;
type ISnapshot<T> = {[K in keyof T]?: T[K];}
export const Foo : IModelType<ISnapshot<IFoo>, IT> = T;
但这似乎没有按预期工作。