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功能不是吗?它们是,但它们实际上并不稳定,将来会改变(我不确定)。我明白了,因此,类型检查器只需要知道您的承诺将通过数组得到解决。好发现!