2016-08-07 27 views
1

Kann mir jemand erklären, warum dieser Code mir einen Fehler gibt?TypeScript async iteriert auf Objektfehler

var promise = new Promise((resolve, reject) => { 
    resolve([1, 2, 3, 4, 5]); 
}); 

async function doSomethingAsync() { 
    var data = await promise; 
    data.forEach(v => console.log(v)); 
} 

doSomethingAsync(); 

Wenn ich versuche, diese wie tsc file.ts ES6 zu kompilieren --target ich habe dies:

error:async.ts(7,10): error TS2339: Property 'forEach' does not exist on type '{}'.

+1

Was passiert, wenn Sie 'new Promise (...)' in 'new Promise (...)' ändern? Vielleicht kann der Typprüfer einfach nicht auf einen hinreichend spezifischen Typus für "Versprechen" schließen? –

+0

Übrigens, sind nicht 'async' und 'erwarten' es7 Features? – Michelangelo

+0

Sie sind, aber AFAIK sie sind nicht wirklich stabil und es wird in der Zukunft geändert werden (ich bin nicht sicher). – user3075373

Antwort

1

Eigentlich fand ich Lösung , können wir einfach nur einen generischen Typ hinzufügen, in unser Versprechen wie:

'use strict'; 

var promise = new Promise<any[]>((resolve, reject) => { 
    resolve(["gdfgdfgdf", "dfggfd", 1, 2, {}]); 
}); 

async function doSomethingAsync() { 
    let data = await promise; 

    for (let i of data) { 
     console.log(i); 
    } 
} 

doSomethingAsync(); 

Jetzt funktioniert es perfekt ohne Chaos in Code :)

+1

Ich sehe, also musste der Typ-Checker nur wissen, dass Ihr Versprechen mit einem Array gelöst werden würde. Schöner Fund! –