我有一个抽象类:
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
不发出任何东西。我只需要欺骗编译器一些方法......