Javascript TypeScript对象异步迭代错误

Javascript TypeScript对象异步迭代错误,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,有人能解释一下为什么这个代码会给我错误吗 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(); 当我尝试编译类似于t

有人能解释一下为什么这个代码会给我错误吗

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的文件时,我有以下几点:

错误:async.ts(7,10):错误TS2339:类型“{}”上不存在属性“forEach”。
实际上我找到了解决方案 ,我们只需在承诺中添加一个泛型类型,如:

'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();
“严格使用”;
var承诺=新承诺((解决、拒绝)=>{
解析([“gdfgdfgdf”,“dfggfd”,1,2,{}]);
});
异步函数doSomethingAsync(){
让数据=等待承诺;
对于(让我来看看数据){
控制台日志(i);
}
}
doSomethingAsync();

现在它可以完美地工作,代码中没有任何混乱:)

如果您将
新承诺(…)
更改为
新承诺(…)
,会发生什么?也许类型检查器根本无法为
promise
推断出一个足够具体的类型。顺便说一句,
async
wait
es7功能不是吗?它们是,但它们实际上并不稳定,将来会改变(我不确定)。我明白了,因此,类型检查器只需要知道您的承诺将通过数组得到解决。好发现!