假设我有一个服务器项目(当然是TypeScript),其中包含两个模块,如下所示:
moduleA.ts:
export default {
foo : function(a:number){ console.log(a); callback('whatever'); }
}
moduleB.ts:
export default {
bar : function(b:string){ console.log(b); callback('whatever'); }
}
假设这些方法可以在客户端项目可以访问的某种API上使用。
在客户端项目(也是TypeScript)中,到目前为止,我的代码看起来像这样:
apiService.call('moduleA.foo', 4);
apiService.call('moduleB.bar', 'hello');
以这种方式一切正常,调用方法将第一个参数作为方法调用,并将任何其他额外参数作为实际方法参数。结果将返回一个承诺。
我想要做的是,以某种方式提取我的服务器项目上的函数签名并使它们可供客户端使用,所以我的客户端代码看起来像这样:
apiService.moduleA.foo(4);
apiService.moduleB.bar('hello');
甚至这个:
moduleA.foo(4);
moduleB.bar('hello');
这样可以正确执行类型检查和参数长度等操作,同时允许底层客户端api调用实现。
有没有人知道可以帮助我实现这一目标的模式或技术,还是我不得不手动生成文件?将服务器和客户端组合到一个项目中似乎不太有用,因为客户端只关心服务器的方法签名,而不是它们的实现服务器端。
警告:这不适用于REST API,而是适用于JSON-RPC 2.0,因此我认为任何适用于REST的端到端类型都不合适。我需要一些抽象。此外,我不使用d.ts文件作为我的服务器方法,无论我必须做什么,都可能涉及从现有.ts文件生成d.ts文件。