如何在抽象 class 中推断构造函数参数类型

How to infer a constructor param type inside of an abstract class

我在基本抽象 class 中有一个方法,它应该 return 与构造函数参数的类型相同。 我不确定这是否可行,或者是否有意义(也许我遗漏了一些明显的东西)。

这是我正在尝试做的事情的简化版本:

abstract class ValueObject {
  private value: any;

  constructor(value: any) {
    this.value = value;
  }

  getValue() {
    return this.value;
  }
}

class UserName extends ValueObject {
  constructor(name: string) {
    super(name);
  }
}

new UserName('some name').getValue(); // This has a type 'any', I want it to be the same type as I called super() with, in this case 'string', but could be any other type for different subclasses 

在我看来这很有意义,因为我无法真正实例化抽象 class,所以我需要有一种方法来传递该方法将 return 的类型。

可能吗?这有意义吗?我是否应该采用完全不同的方法?

谢谢!

您可以使用 generics 来指定摘要中的类型 class 即

abstract class ValueObject<T> {
  private value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue() : T {
    return this.value;
  }
}

class UserName extends ValueObject<string> {
  constructor(name: string) {
    super(name);
  }
}

const result = new UserName('some name').getValue();
console.log(result);
console.log(typeof(result));