【发布时间】:2019-12-09 02:11:19
【问题描述】:
我正在使用 Angular 开发通用数据服务,它可以处理数据模型并与后端通信。
现在我对每个 API 端点都有多个服务,相同的代码,只是模型类型(当然还有 URI)是不同的。
我开始以这种方式开发多功能服务:
这是 BaseModel 定义模型上最基本的东西,models/base_model/base.model.ts:
export class BaseModel {
id: number;
prepareToSave: () => void;
static parse () {
throw new Error('not implemented');
}
}
这是一个用于定义数据集的 Photoalbum 模型,models/photoalbum/photoalbum.model.ts:
export class Photoalbum {
id: number;
public: boolean;
name: string;
static parse(data: any) {
return new this(data);
}
prepareToSave() {
return {
// convert datas to backend
}
}
}
这里是与后端通信的DataService,services/data/data.service.ts:
export class DataService<T extends BaseModel> {
constructor(
private type: new () => T,
private url: string,
private http: HttpClient) { }
getAll(): Promise<T[]> {
return new Promise( resolve => {
this.http.get(this.url).subscribe( (result: any) => {
const data: T[] = [];
result.forEach( (item: any) => {
data.push(this.type.parse(item)); // error in this line
});
resolve(data);
});
});
}
// ...
}
现在我在 DataService 中收到此错误:
Property 'parse' does not exist on type 'new () => T'.
如果相关的话,我正在使用 TypeScript 3.5.2 和 tslint 5.9.1。
有没有办法解决这个问题?
【问题讨论】:
-
@netdjw 你有没有得到这个问题的答案?我面临同样的问题,但没有找到解决方案:(
标签: angular typescript tslint typescript3.0