【发布时间】:2016-05-27 11:29:16
【问题描述】:
打字稿: 我在 DataProvider 类中有一个方法,方法是 getTableData:
public static getTableData<T extends DataObject>(type: { new(): T}): Array<T> { ... }
这在我编码时完美运行:
let speakers = DataProvider.getTableData(Speaker); // where Speaker is a class
现在我想从一个通用类中调用它:
export class ViewModelBase<T extends DataObject> {
public getData(): Array<T> {
return <T[]> DataProvider.getTableData(T);
}
}
现在我得到一个 Cannot find name 'T' 错误,因为我传递给 getTableData 的 T 参数。 getTableData 应该如何调用?
更新: 在@Paleo 的帮助下,我想出了这个:
export class ViewModelBase<T extends DataObject> {
constructor(private dataObjectClass: { new(): T}){}
public getTableData(): Array<T> {
return <T[]> DataProvider.getTableData<T>(this.dataObjectClass);
}
}
问题是,虽然我已经告诉过:
class SpeakerViewModel extends ViewModelBase<Speaker> { ... }
我希望它成为 Speaker 的 ViewModel 我仍然有实例化 SpeakerViewModel 之类的:
let vm = new SpeakerViewModel(Speaker);
虽然我已经告诉过这一切都是关于Speaker。我想我仍然没有完全理解这一点。
【问题讨论】:
-
在
DataProvider.getTableData(T)中,参数T没有定义。 -
"我希望它成为 Speaker 的 ViewModel 我仍然有实例化 SpeakerViewModel 像:
let vm = new SpeakerViewModel(Speaker);" 抱歉,我很困惑。你能改写一下吗?您要省略的代码是什么? -
我不确定发生了什么变化,但我只能让它与
{ new(...args: any[]): T }之类的参数签名一起使用。我怀疑这是因为我的类构造函数有参数。
标签: generics typescript