San*_*ord 2 typescript angular
我为一组对象创建了一个接口
export interface UpdateMediaList {
[index: number]: ContactResponse;
}
interface ContactResponse {
contactId: number;
email: string;
firstName: string;
imgDisplayPath: string;
inMediaList: true;
jobTitle: string;
lastName: string;
mediaOutletId: number;
mediaOutletName: string;
openRate: string;
phone: string;
responseRate: string;
secureRate: string;
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的服务中使用它......
postUpdateMediaList(param, body, url = this.urls.mediaList.updateMediaList) {
let params = new HttpParams();
params = params.set('sortType', param.sortType);
params = params.set('numRows', param.numRows);
params = params.set('startRow', param.startRow);
return this.http.post<UpdateMediaList>(url, body, {params: params});
}
Run Code Online (Sandbox Code Playgroud)
现在我收到了这个错误
ERROR in src/app/modules/media-list/containers/media-list-builder/media-list-builder.component.ts(142,22): error TS2339: Property 'filter' does not exist on type 'UpdateMediaList'
Run Code Online (Sandbox Code Playgroud)
这是在这个代码块中:
this.mediaList = response
.filter(items => items.inMediaList === true)
.map(items => items.contactId);
while (this._contacts.value.length !== 0) {
this._contacts.removeAt(0);
}
Run Code Online (Sandbox Code Playgroud)
你的定义:
export interface UpdateMediaList {
[index: number]: ContactResponse;
}
Run Code Online (Sandbox Code Playgroud)
没有定义 TypeScript Array,而只是一个带有数字键的对象,其值为ConstactResponse对象。AnArray<T>确实具有数字键控属性,但它也具有您显然依赖的所有Array方法,例如filter()。
这是符合您UpdateMediaList定义的内容:
declare const someContactResponse: ContactResponse;
const weirdUpdateMediaList: UpdateMediaList = {0: someContactResponse};
Run Code Online (Sandbox Code Playgroud)
如您所见,weirdUpdateMediaList具有数字键属性但不是数组。您不想允许此代码:
weirdUpdateMediaList.filter(x => true); // error at compile time
Run Code Online (Sandbox Code Playgroud)
因为它会在运行时爆炸weirdUpdateMediaList.filter is not a function。
假设你实际上是Array从你的后端得到一个,那么你应该Array像这样使用而不是你的定义UpdateMediaList:
export type UpdateMediaList = Array<ContactResponse>;
Run Code Online (Sandbox Code Playgroud)
或者,等效地
export type UpdateMediaList = ContactResponse[];
Run Code Online (Sandbox Code Playgroud)
然后,如果你尝试这个,你会得到一个错误:
const weirdUpdateMediaList: UpdateMediaList = {0: someContactResponse};
// error! not assignable to type 'ContactResponse[]'.
// Property 'length' is missing in type '{ 0: ContactResponse; }'.
Run Code Online (Sandbox Code Playgroud)
并且可以安全地假设任何类型的对象UpdateMediaList都是具有Array您需要的所有方法的实际对象。
那有意义吗?祝你好运。
| 归档时间: |
|
| 查看次数: |
3616 次 |
| 最近记录: |