Bro*_*yer 5 generics typescript
TypeScript: 我在DataProvider类中有一个带有方法getTableData的方法:
public static getTableData<T extends DataObject>(type: { new(): T}): Array<T> { ... }
Run Code Online (Sandbox Code Playgroud)
当我编码时,这完美地工作:
let speakers = DataProvider.getTableData(Speaker); // where Speaker is a class
Run Code Online (Sandbox Code Playgroud)
现在我想从泛型类中调用它:
export class ViewModelBase<T extends DataObject> {
public getData(): Array<T> {
return <T[]> DataProvider.getTableData(T);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,对于传递给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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,尽管我已经讲过:
class SpeakerViewModel extends ViewModelBase<Speaker> { ... }
我希望它成为ViewModel,因为Speaker我仍然具有实例化之SpeakerViewModel类的东西:
let vm = new SpeakerViewModel(Speaker);
尽管我已经告诉过这一切了Speaker。我想我还是不太了解。
泛型只是元数据。调用函数时它们不能用作参数。也许你需要这样的东西:
export class ViewModelBase<T extends DataObject> {
constructor(private Cl: {new(): T}) {
}
public getData(): Array<T> {
return DataProvider.getTableData<T>(this.Cl);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10239 次 |
| 最近记录: |