2016-07-29 22 views
1

dies ist eine sehr häufige Verwendung von JavaScript oder Typoskript foreach:Typoskript. So vermeiden Sie diesen Fehler in der foreach-Schleife: "Die linke Seite einer arithmetischen Operation muss vom Typ" any "," number "oder" enum type "sein.

myArray = ["a","b","c"] 

for(var index in myArray) 
    console.log(myArray[index]) 

die Codeprotokolle: a b und c

in Typoskript jedoch der "Index" var gilt eine Zeichenfolge sein. . Wenn ich irgendwelche Berechnungen, zum Beispiel Index * 2 zeigt die TS compuler die Brache Compiler-Fehler:

for(var index in myArray) 
    console.log(index * 2); // TS compiler error. 

Error TS2362 The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type

aber protokolliert 0,2 und 4, wenn sie ausgeführt (wie erwartet)

Wie kann ich diesen Fehler vermeiden oder unterdrücken?

Antwort

3

index ist eine Zeichenfolge. for..in iteriert über die Schlüssel eines Objekts. Es passiert einfach, dass die Schlüssel eines Arrays numerisch sind. Trotzdem sind sie als Strings gespeichert.

Check this out:

var myArray = [1, 2, 3]; 
 
for (var index in myArray) { 
 
    console.log(typeof index); 
 
}

auch erwähnenswert, es ist, dass es über die um keine Garantie ist, dass Sie die Schlüssel zu bekommen. Normalerweise erscheinen sie in der richtigen Reihenfolge, aber es wäre nicht ungültig, wenn Sie beispielsweise "3", "1", "2" erhalten.

Verwenden Sie stattdessen einfach einen normalen for loop. Dann werden Ihre Indizes Zahlen und Sie werden sicher wissen, dass Sie sich durch das Array in der Reihenfolge bewegen.

var myArray = [1, 2, 3]; 
 
for (var i = 0; i < myArray.length; i++) { 
 
    console.log(typeof i, myArray[i]); 
 
}

könnten Sie führen auch durch sie forEach verwenden.

var myArray = [1, 2, 3]; 
 
myArray.forEach(function(val, index) { 
 
    console.log(typeof index, val); 
 
});

2

Es ist eine Zeichenfolge, Sie können parseInt(index, 10) darauf anrufen. Das liegt daran, dass Indizes von Objekten immer Zeichenfolgen sind, selbst bei Arrays. Array hat nur ein zusätzliches Verhalten für Schlüssel, die wie Ganzzahlen aussehen. Siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

Note: for...in should not be used to iterate over an Array where the index order is important.

Es gibt keine Garantie, dass die Elemente, um iteriert werden

Sie immer das Element werfen könnte den Fehler

console.log(index as number * 2);/
+0

der Index ist kein String. ist typeof index = 'Nummer' –

+0

Es ist eine Zeichenfolge, das kann ich Ihnen versichern. Mike C's Antwort hat einen Beweis geschrieben –

+0

Ich sehe es jetzt. Es tut uns leid –

2

Unter Berücksichtigung Ihrer ‚Index‘ zu vermeiden, wird eine Zahl Es ist möglich, dass Sie die Warnung/den Fehler unterdrücken können, indem Sie den Index als Nummer

ausgeben

Alternativ

for(var index in myArray) 
    console.log(parseInt(index) * 2);