javascript - A propriedade concat do Typescript não existe
Meu código funciona como esperado, mas o TypeScript obviamente tem um problema com algo que eu fiz e eu gostaria de entender o que é. O TypeScript está reportando os seguintes erros:
Abaixo está o código que funciona.
getZones() {
this.spinner.show();
this.zonesService.getZonesByUserId(this.userId)
.mergeMap(zones => Observable.from(zones))
.mergeMap(zone => this.zonesService.getAssociations(zone['id'], '/team')
.catch(() => Observable.of(null))
.map(team => {
if (team['team']) {
return Object.assign({}, zone, { teamName: team['team']['name'] });
} else {
return zone;
}
})
)
.mergeMap(zone => this.zonesService.getAssociations(zone['id'], '/site')
.catch(() => Observable.of(null))
.map(site => {
if (site['site']) {
return Object.assign({}, zone, { siteName: site['site']['name'] });
} else {
return zone;
}
})
)
.reduce((zones, zone) => {
return zones.concat(zone);
}, [])
.subscribe(
_data => {
this.zones = _data
.map(zone => {
if (zone['personal']) {
this.personalZone = zone;
this.personalZone['name'] = 'My Personal Zone';
this.personalZone['teamName'] = '';
}
return zone;
})
.filter(zone => {
return zone['personal'] !== true;
})
.map(zone => {
if (zone['siteName'] === undefined) {
zone['siteName'] = 'NO_SITE_NAME';
}
return zone;
});
if (this.zones && this.personalZone !== null) {
this.zones.unshift(this.personalZone);
}
this.loading = false;
this.spinner.hide();
},
_error => {}
);
};
O erro apareceu depois que eu adicionei as condições if dentro dos métodos map. Antes da adição dessas condições, meu código era o seguinte:
.map(team => {
return Object.assign({}, zone, { teamName: team['team']['name'] });
})
.map(site => {
return Object.assign({}, zone, { siteName: site['site']['name'] });
})
As condições eram necessárias para lidar com casos em que o servidor não conseguia retornar o objeto solicitado. Agora o Typescript parece ter um problema com o código. Com certeza o parâmetro zones na função reduce é um array e com certeza o valor _data também é um array. Por algum motivo, o Typescript acha que estes são objetos.
Saída do Console:
console.log(zones);
console.log(zone);
Obrigado por qualquer contribuição.

