【发布时间】:2017-09-16 06:47:17
【问题描述】:
这在某种程度上是我昨天在其他地方发布的问题的转变。
我的目标不是获得有效的结果,而是更好地理解在返回正确类型的同时可以获得的设计类型。这是通过在这里使用一个极简主义的例子,所以请不要告诉我它没用或什么都不做。
代码示例(Try it in Typescript playground):
interface TestInterface {
test: () => {}
}
class Obj implements TestInterface{
test() {
return { test: 'test' }
}
}
class Wrapper<T extends TestInterface> {
constructor(public obj: T) {
}
test<T>() {
return this.obj.test();
}
test2<T extends TestInterface>(obj: T) {
return obj.test();
}
}
let w = new Wrapper(new Obj());
let r1 = w.obj.test();
let r2 = w.test();
let r3 = w.test2(new Obj);
这里:w的类型为Wrapper<Obj>r1的类型为{test: string}w.test的类型为Wrapper<Obj>.test: () => {}r2的类型为{}r3 的类型为 {}
这种情况是一个在属性中存储对象的类。它代理对该对象的调用。
我感兴趣的是r2 的返回类型。特别是我想找到一种方法来返回与r1 相同的类型,而无需在三个底线中指定类型。 r3 是另一个测试,通过直接传递泛型类型。结果是一样的。
我对此有一些疑问:
- 据我了解,
Wrapper.test返回类型在OBJ泛型产生任何影响之前就已解决。因此使用它的基值(在这种情况下{}是TestInterface.Test的结果)。对吗? - 这是故意的吗?一些限制,未来 TS 版本中的一些即将推出的功能? (没有看到任何相关内容)
- 主要是,考虑到在这样的代理中,应该可以插入任何尊重
TestInterface的东西,如何能够转发嵌入对象方法的返回类型(或用它们组成一个新对象)。并且不用在调用者的任何地方(在底线)放置泛型,我知道该怎么做。
我在这篇文章中看到了一些对象构建器:https://github.com/Microsoft/TypeScript/pull/14141。也许这就是我要走的方向。
【问题讨论】:
标签: typescript interface wrapper typescript-typings proxy-classes