Estoy trabajando en el tutorial de Angular2 Tour of Heroes y estoy tratando de aprender a trabajar con los servicios. Pude hacer que el tutorial básico funcionara, pero cuando intento hacerlo un poco más complejo, mi aplicación se rompe y no estoy seguro de qué estoy haciendo mal.

El modelo básico que funciona bien consiste en un objeto simulacro de héroes junto con un archivo hero.ts que especifica el tipo de cada línea.

Aquí está el tutorial de Tour of Heroes al que me refiero: https: // angular.io/docs/ts/latest/tutorial/toh-pt4.html

Archivo hero.ts:

export class Hero {
    id: number;
    firstName: string;
    lastName: string;
    street: string;
    suite: string;
    city: string;
    state: string;
    zipcode: string;
}

Archivo mock-hero.ts:

import { Hero } from './hero';

export const HEROES: Hero[] = 
[
    {
        "id": 101, 
        "firstName": "John",
        "lastName": "Doe",
        "street": "111 Main Street",
        "suite": "Apt. 111",
        "city": "Anytown",
        "state": "US",
        "zipcode": "55555-0000"
    }
]

Si quiero agregar un objeto anidado, como cuentas, aparece el error:

El literal de objeto solo puede especificar propiedades conocidas y las 'cuentas' no existen en el tipo 'Héroe'.

Archivo hero.ts:

export class Hero {
    id: number;
    firstName: string;
    lastName: string;
    street: string;
    suite: string;
    city: string;
    state: string;
    zipcode: string;
    accounts: ????;
    accountNum: string;
    accountName: string;
    type: string;
    availBalance: number
}

Archivo mock-hero.ts:

import { Hero } from './hero';

export const HEROES: Hero[] = 
[
    {
        "id": 101, 
        "firstName": "John",
        "lastName": "Doe",
        "street": "111 Main Street",
        "suite": "Apt. 111",
        "city": "Anytown",
        "state": "US",
        "zipcode": "55555-0000",
        "accounts": [ 
            {
                accountNum: "012345678",
                accountName: "Personal Checking",
                type: "checking",
                availBalance: 1000.00
            }
        ]
    }
]

Entonces, entiendo que necesito identificar "cuentas" pero me falta lo que clasifico "cuentas" para poder anidar objetos correctamente.

Gracias de antemano.

0
Phil Jefferies 10 dic. 2016 a las 04:08
accounts: Account[] o accounts: Object[] deberían funcionar, ¿verdad?
 – 
soywod
10 dic. 2016 a las 04:30
Probé ambos de varias maneras, pero eso no pareció funcionar para mí.
 – 
Phil Jefferies
10 dic. 2016 a las 04:38

1 respuesta

La mejor respuesta
export interface Account {
    accountNum: string;
    accountName: string;
    type: string;
    availBalance: number;
}

export class Hero {
    id: number;
    firstName: string;
    lastName: string;
    street: string;
    suite: string;
    city: string;
    state: string;
    zipcode: string;
    accounts: Array<Account>;
}
1
JB Nizet 10 dic. 2016 a las 13:37
Impresionante, eso fue todo. ¡Gracias JB!
 – 
Phil Jefferies
10 dic. 2016 a las 13:50