我正在尝试将生产Angular应用程序从7迁移到8。尝试构建时,出现以下错误:
ERROR in app/vehicle/vehicle.component.ts:90:36 - error TS2344: Type 'IOwnerVehicle' does not satisfy the constraint 'ObservableInput<any>'.
Property '[Symbol.iterator]' is missing in type 'IOwnerVehicle' but required in type 'Iterable<any>'.
90 flatMap<IVehicleOwner, IOwnerVehicle>(owner => {
~~~~~~~~~~~~~
../node_modules/typescript/lib/lib.es2015.iterable.d.ts:43:5
43 [Symbol.iterator](): Iterator<T>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'[Symbol.iterator]' is declared here.
我相信我在RXJS Subscribable documentation的 TypeScript可预订接口问题主题中找到了问题的根源。但是我仍然不知道如何解决这个问题。
VSCode显示车辆部件没有错误。我以为ts文件后面的数字应该代表行和列,但是组件只有50行,而第36行是空白。
可订阅的文档说了一些有关“ TypeScript在使用定义为符号属性的方法支持接口方面存在问题。”,但是IOwnerVehicle接口只是一个属性包。它没有方法。
唯一与订阅有关的代码是构造函数
constructor(@Inject(MAT_DIALOG_DATA) private owner: IVehicleOwner,
private svc: SearchService,
private searchDlg: MatDialogRef<OwnerVehicleComponent, IOwnerVehicle>) {
this.svc.getOwnerVehicles(owner.id.toString()).subscribe(
list => {
if (list.length > 0)
this.list = list;
else
this.searchFailed = true;
});
}
服务再简单不过了
getOwnerVehicles(vehicleId: string): Observable<IOwnerVehicle[]> {
const url = `${this.webApi}/vehicle`;
return this.http.get<IOwnerVehicle[]>(url,
{params: {owner : vehicleId}});
}
有人可以帮我弄清楚我需要更改的内容或需要查看的其他地方吗?
答案 0 :(得分:1)
让我们看一下flatMap
的类型:
declare function mergeMap<T, O extends ObservableInput<any>>(project: (value: T, index: number) => O, concurrent?: number): OperatorFunction<T, ObservedValueOf<O>>;
如您所见,flatMap
的第二个泛型扩展了ObservableInput
。因此,在您的代码中,IOwnerVehicle
似乎是一个简单的界面,实际上应该为ObservableInput<IOwnerVehicle>
。
所以只需将代码更改为:
flatMap<IVehicleOwner, ObservableInput<IOwnerVehicle>>(owner => {})
您应该可以在vehicle.component.ts
第90行的第36列中找到它