如何自动将类实例方法转发给另一个对象的方法?

问题描述 投票:0回答:1

关于以下示例代码,是否有任何类型安全的方法可以自动将任何原型方法调用转发到另一个对象的相关方法?

class Foo {
  greet() {
    return "hello";
  }
  sayGoodbye() {
    return "bye";
  }

  // ... many more methods
}

class Bar {
  foo: Foo;

  constructor() {
    this.foo = new Foo();
  }

  greet() {
    this.foo.greet();
  }

  sayGoodbye() {
    this.foo.sayGoodbye();
  }

  // ...
}

我们不必为

method() { foo.method() }
上的所有方法都写
Foo
? IE。就像在 JavaScript 中我们如何做
Object.getOwnPropertyNames(Foo.prototype).forEach(...)
并将方法指向
foo
,但是以类型安全的方式?

我尝试过混合,但我发现它们很难使用,因为它们颠倒了关系(

Foo
必须子类化
Bar
,所以我不能在声明
Foo
时使用特定参数实例化
Bar
)。

javascript typescript aggregation subclassing forwarding
1个回答
0
投票

您可以使用

extends
关键字创建一个继承自其 超类的子类:

extends 关键字用于 类声明类表达式 来创建一个类,该类是另一个类的子类。

TS游乐场

class Foo {
  greet() {
    return "hello";
  }
  sayGoodbye() {
    return "bye";
  }
}

class Bar extends Foo {}
//        ^^^^^^^

const bar = new Bar();

console.log(bar.greet()); // "hello"
console.log(bar.sayGoodbye()); // "bye"

© www.soinside.com 2019 - 2024. All rights reserved.