2016-08-07 2 views
1

Может кто-нибудь объяснить мне, почему этот код дает мне ошибку?TypeScript async итерация по ошибке объекта

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(); 

Когда я пытаюсь скомпилировать это как TSC file.ts --target ES6 у меня есть это:

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

+1

Что произойдет, если вы измените 'новый Promise (...)' на 'новый Promise (...)'? Возможно, проверка типа просто не может вывести достаточно определенный тип для 'обещания'? –

+0

Кстати, не являются ли функции 'async' и' await' es7? – Michelangelo

+0

Они, но AFAIK, они на самом деле не стабильны, и в будущем они будут изменены (im not sure). – user3075373

ответ

1

На самом деле я нашел решение , мы можем просто добавить общий тип в наше обещание, как:

'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(); 

Теперь он отлично работает без каких-либо путаницы в коде :)

+1

Я вижу, поэтому проверяющий тип просто должен был знать, что ваше обещание будет разрешено с помощью массива. Хорошая находка! –

Смежные вопросы