angular - 屬性 'parse' 在類型 'new() => T' 上不存在
我正在使用 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。
有人知道怎麼解決這個問題嗎?
答案#1
好吧,parse 只存在於 BaseModel 的靜態屬性中,所以你收到錯誤也不足為奇。請更改建構函數中 type 的類型。
constructor(
private type: { new (): T, parse(data: any): any },
private url: string,
private http: HttpClient) { }
然後更新 parse 方法的定義以接受一個參數。
export class BaseModel {
id: number;
prepareToSave: () => void;
static parse (item: any): any {
throw new Error('not implemented');
}
}
