Mientras uso un bucle for, mi objeto let tiene el tipo de cadena, aunque el objeto por el que estoy iterando es de un tipo definido en una interfaz.

A continuación se muestra el código que estoy usando. Cuando intento acceder a mapping.attribute que está definido en la interfaz como una cadena, aparece el error [La propiedad 'atributo' no existe en el tipo 'cadena'.]

Tengo la siguiente interfaz y función:

interface IMapping {
    attribute: string;
    property: string;
}

mapAttributes(mappings: IMapping[], values) {            
    for (let mapping in mappings) {
        if (mapping.hasOwnProperty("attribute")) {
            console.log(this.attributes.find(attribute => attribute.name === mapping.attribute).value);
        }
    }
}

¿Cómo se debe definir el bucle for para poder usar una propiedad que se ha definido en mi interfaz?

6
Ben Temple-Heald 15 dic. 2016 a las 14:38

2 respuestas

La mejor respuesta

Pude ejecutar tu ejemplo al reemplazar

for (let mapping in mappings) {

Con

for (let mapping of mappings) {
16
Blablalux 15 dic. 2016 a las 11:54

Esto ocurrió debido a for..of vs. for..in declaraciones

Tanto las instrucciones for..of y for..in iteran sobre listas ; Sin embargo, los valores iterados son diferentes, for..in devuelve una lista de claves en el objeto que se está iterando, mientras que for..of devuelve una lista de valores numéricos propiedades del objeto que se itera.

Aquí hay un ejemplo que demuestra esta distinción:

let list = [4, 5, 6];

for (let i in list) {
   console.log(i); // "0", "1", "2",
}

for (let i of list) {
   console.log(i); // "4", "5", "6"
}
4
Rukshan Dangalla 27 jul. 2018 a las 18:23