【发布时间】:2016-10-18 10:49:49
【问题描述】:
我正在开发一个简单的 RPC 客户端/服务器库供我内部使用。我想使用一个接口来描述客户端和服务器,这样我就可以在我的通用应用程序中的服务器和浏览器之间共享它们。
服务器很简单,服务只是扩展了我的 Service 类并实现了一个描述 API 的接口。
客户端将实现为 ES6 代理,只需将所有方法调用发送到服务器,我希望它具有强类型以及服务类。 我需要 ServiceClient 类型的实例来拥有它的类型参数的所有方法和属性,不管它是什么。
我在想这个语法:
interface Api
{
foo(): boolean;
}
class MyService extends Service implements Api
{
public foo(): boolean { return true; }
}
// usage
let result = (new ServiceClient<Api>()).foo(); // type of result is inferred, I get an error if I try to use an undefined method, arguments are type checked...
我尝试浏览一些类似的类型,但找不到方法。感谢您的帮助。
【问题讨论】:
-
你到底在问什么?
-
如何让 ServiceClient
从 T“继承”方法,而不需要实际继承和实现它们。 -
您的代码似乎缺少某些部分,
Service是什么,ServiceClient是什么?请分享所有需要的代码。 -
@NitzanTomer 我不知道要在 ServiceClient 中添加什么,除了我的代理实现(这是不相关的),这是我的问题。 Service 只是一个普通的父类型,目前它是空的,但将来它会持有一个构造函数,将它注册到 HTTP 服务器。
-
基本上我需要以某种方式修改我调用“new”时创建的类型 - 编译时,它应该在运行时保持正常。
标签: typescript ecmascript-6 es6-proxy