Typescript 如何正确实现重载类的decorator接口
我想用一个修饰符Typescript 如何正确实现重载类的decorator接口,typescript,types,decorator,Typescript,Types,Decorator,我想用一个修饰符@asyncStore扩展类UserStore实现IUserStoreIUserStore是一个扩展IAsyncStore的接口。然而,TypeScript抱怨我没有在类UserStore中正确实现AsyncStore 完整错误: TS2420: Class 'UserStore' incorrectly implements interface 'IUserStore'. Property 'isLoading' is missing in type 'UserStore'
@asyncStore
扩展类UserStore实现IUserStore
IUserStore
是一个扩展IAsyncStore
的接口。然而,TypeScript抱怨我没有在类UserStore
中正确实现AsyncStore
完整错误:
TS2420: Class 'UserStore' incorrectly implements interface 'IUserStore'.
Property 'isLoading' is missing in type 'UserStore'
如何正确键入所有内容,以便正确键入我的UserStore
以下是我的一些代码片段(如果与此问题或错误无关,请忽略不相关的代码,并将接口留空):
通过TypeScript实现类装饰器变异
为了使添加的属性对键入系统可见,应使用合并接口另外键入类:
interface UserStore extends IUserStore {}
@asyncStore
class UserStore /* implements IUserStore */ {...}
这与为更简洁的代码使用decorator的目的相冲突
implements IUserStore
是冗余的,因为它由UserStore
合并接口保证,而UserStore
类已经实现了它
另外,IUserStore
也没有很好的用途,因为它与UserStore
接口相同
在这种情况下,由于TypeScript的限制,直接继承能够提供更多无故障且一致的键入。在进一步搜索之后,TypeScript似乎还不支持这种情况。有一点,但有点脏,变通办法,让打字工作 我将该类添加到我的代码中:
class DecoratorService implements IAsyncStore {
isLoading: boolean;
}
然后我使用这个类作为UserStore
的基类,如下所示:
class UserStore extends DecoratorService implements IUserStore {}
TypeScript不再对我的代码发出错误,我可以运行它而不会出现任何错误。当我想添加另一个decorator时,我只需向DecoratorService类添加必要的值,TypeScript就会理解代码。Decorators无法更改类的结构。您可以创建一个函数,该函数接受一个类并返回一个扩展类,但在您的情况下,我认为您应该将
AsyncStore
作为UserStore
的基类。问题已经得到了回答。删除带有正确答案的问题而不是接受它们并不是获得帮助的最佳方式。如果你介意的话,它也不能帮助其他遇到同样问题的用户。@estus它没有回答我的问题,部分原因是我给出的代码示例有错误,所以我重新提交了我的问题。@TitianCernicova Dragomir我不想让它成为基类。我想使用作文。我只是重新提交了它,几乎没有任何更改。它实际上回答了这个问题,通常是这样做的。如果提供的解决方案有问题,请考虑提供反馈。<代码>接口UsSturt不是我的代码或我的示例代码中的东西。你的例子是什么?我只有IUserStore
和IAsyncStore
。您之前提到过这段代码,但它并不能解决我的问题。它是一个合并接口。看,它解决了这个问题。如果您尝试此代码,至少在当前状态下,它不会产生任何类型问题。
class UserStore extends DecoratorService implements IUserStore {}