Buenas tardes, tengo un problema cuando quiero devolver un array de objetos desde una función externa.
He declarado una clase Object con 2 propiedades, su constructora y una que funciona donde devuelvo un arreglo con mas de 50 objetos para este ejemplo solo puse 4 objetos
export class Object { formcontrolName: String; formcontrolTraducido: String; constructor(formcontrolName: String, formcontrolTraducido: String) { this.formcontrolName = formcontrolName; this.formcontrolTraducido = formcontrolTraducido; } getData() { return [ { formcontrolName: 'callId', formcontrolTraducido: 'CId' }, { formcontrolName: 'collegeCareerId', formcontrolTraducido: 'Carrera' }, { formcontrolName: 'collegeDepartmentId', formcontrolTraducido: 'Nombre del Departamento/Centro', }, { formcontrolName: 'detailedAreaKnowledgeId', formcontrolTraducido: 'Campo Detallado', }, ]; } }El problema es que quiero llamar desde otro componente a la función getData de la clase Object, pero al regresar me sale el siguiente error:
Escriba '() => { formcontrolName: cadena; formcontrolTraducido: string; }[]' faltan las siguientes propiedades del tipo 'Object[]': pop, push, concat, join
import { Component, OnInit } from '@angular/core'; import { Object } from './object'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], }) export class AppComponent implements OnInit { data: Object; arrayData: Object[]; constructor() {} ngOnInit() { this.arrayData = this.data.getData; console.log('arrayData: ' + this.arrayData); }}
código de ejemplo de stackblitz
Soy nuevo en angular y en trabajar con matrices, me gustaría saber qué puedo hacer para resolver mi problema. Muchísimas gracias
En primer lugar, el tipo de la propiedad arrayData no es de tipo Object , que es la clase que está utilizando, por lo que un tipo más adecuado sería el mismo que devuelve el método getData .
Puede obtener su tipo de devolución utilizando el tipo de ayuda de mecanografiado ReturnType , por lo que una buena manera de escribir esto sería:
arrayData: ReturnType<Object['getData']>; Una recomendación que tengo es no usar el nombre Object para una clase, ya que tiene el mismo nombre que Object y javascript incorporado.
Después de eso, el problema que tienes aquí:
ngOnInit() { this.arrayData = this.data.getData(); console.log('arrayData: ' + this.arrayData); }Es que le estás asignando un método a una variable que espera un arreglo de algo, por eso te da el error:
Type '() => { formcontrolName: string; formcontrolTraducido: string; }[]' is missing the following properties from type 'Object[]': pop, push, concat, joinSolo necesita llamar al método como:
this.arrayData = this.data.getData();Con todo eso en mente, el código final se vería así:
import { Component, OnInit } from '@angular/core'; import { Object } from './object'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], }) export class AppComponent implements OnInit { name = 'Angular'; data: Object; arrayData: ReturnType<Object['getData']>; constructor() {} ngOnInit() { this.arrayData = this.data.getData(); console.log('arrayData: ' + this.arrayData); } }