【发布时间】:2019-01-22 17:28:21
【问题描述】:
我有一个抽象类:
abstract class Foo {
abstract bar(): string;
}
我有一些扩展 Foo 的类:
class Foo1 extends Foo {
bar(): string { return 'foo1'; }
}
class Foo2 extends Foo {
bar(): string { return 'foo2'; }
}
我有另一个类,我想将Foo 的所有方法代理到Foo。如果我在此类上定义 Foo 的所有方法,这实际上工作正常。但我宁愿不这样做。我希望在Foo 上定义Foo 的方法,并且编译器知道FooProxy 也实现了这些方法,而无需实际实现它们。这可能吗? Proxy 类看起来像这样:
class FooProxy {
public foo: Foo;
constructor(foo: Foo) {
this.foo = foo;
let handler = {
get: function(target: FooProxy, prop: string, receiver: any) {
if(Foo.prototype[prop] !== null) {
return target.foo[prop];
}
return Reflect.get(target, prop, receiver);
}
}
return new Proxy(this, handler);
}
}
例子:
let f = new Foo1();
let fp = new FooProxy(f);
fp.bar();
输出:
error TS2339: Property 'bar' does not exist on type 'FooProxy'.
这个程序实际上在操场上运行,但tsc 不发出任何东西。我只需要欺骗编译器一些方法......
【问题讨论】:
标签: angular typescript es6-proxy