我在服务类中有一个函数,该函数传递了扩展我的 Bean 类的泛型类型。我希望函数调用 Bean 类中的静态函数来创建一个 Bean 数组。我在操场上的代码可以编译,但是我收到运行时浏览器错误
Uncaught TypeError: ctor.constructor.fromEntryList is not a function
如果我删除了.constructor
创建的 bean 数组,但是没有.constructor
.
我迷失在如何正确打字稿编码这个功能。非常感谢任何帮助,因为我未能成功找到关于 SO 的先前答案。
代码:
// Base class that will be extended
class Bean {
id: number;
static fromEntryList<T1>(ctor: new (p: number) => T1, numbers: Array<number>): Array<T1> {
let result: Array<T1> = [];
for (let anumber of numbers) {
result.push(new ctor(anumber));
}
return result;
}
constructor(p: number) {
this.id = p;
}
}
// Base service class that will be extended
class BeanService {
constructor() { }
get_entry_list<T extends Bean>(ctor: new (p: number) => T): T[] {
let x: T[] = (<typeof Bean>ctor.constructor).fromEntryList(ctor, [1, 2, 3, 4]);
return x;
}
}
let service = new BeanService();
let beans: Bean[] = service.get_entry_list(Bean);
谢谢。
在您的 param 定义中get_entry_list
,它只定义了 ctor 的类型但缺少静态方法接口,因此访问它会引发编译错误,而运行时可以正确访问这些属性。
您可以定义构造函数接口,
interface XXX<T> {
new(p: number): T;
fromEntryList<U>(ctor: new (p: number) => U, numbers: Array<number>): Array<U>;
}
这基本上是Bean
然后将其用于参数签名的表示
get_entry_list<T extends Bean>(ctor: XXX<T>): Array<T>
允许 get_entry_list 中提供的 ctor 可以访问静态方法。
操场:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句