如何在抽象 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));
我在基本抽象 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));