Pesquisa de site

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.

Artigos relacionados