TypeScript: 我在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);
}
}
现在我在调用getTableData时遇到了一个“找不到名称'T'”的错误,这是我传递给它的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);
}
}
事实上,虽然我已经在以下代码中说明了我想要它作为
Speaker
的ViewModel:
class SpeakerViewModel extends ViewModelBase<Speaker> { ... }
但我仍需要像这样实例化SpeakerViewModel
:
let vm = new SpeakerViewModel(Speaker);
虽然我已经告诉过它所有关于Speaker
的内容。我想我还没有完全理解这个问题。
DataProvider.getTableData(T)
中,参数T
未定义。 - Paleolet vm = new SpeakerViewModel(Speaker);
” 对不起,我有点困惑。您能重新表达一下吗?您想省略哪些代码? - Aluan Haddad{ new(...args: any[]): T }
才能使其工作。我怀疑是因为我的类构造函数有参数。 - Erik Philips