Javascript 在Typescript–;所需选项
考虑这一基本问题: 导致错误Javascript 在Typescript–;所需选项,javascript,node.js,typescript,async-await,async-iterator,Javascript,Node.js,Typescript,Async Await,Async Iterator,考虑这一基本问题: 导致错误异步迭代器的“next()”方法返回的类型必须是具有“value”属性的类型的承诺。对于targetesnext,同样的错误 如果完全删除target选项,则会得到类型“{[Symbol.asyncierator]():{I:number;next():Promise;};}”不是数组类型或字符串类型。 报告中提到了几个警告,但没有一个能解决我的问题。奇怪的是,它很好用 要编译此示例,需要哪些tsconfig选项?在深入研究该问题后,似乎是由于这里存在多个问题 异步迭
异步迭代器的“next()”方法返回的类型必须是具有“value”属性的类型的承诺。
对于targetesnext
,同样的错误
如果完全删除target
选项,则会得到类型“{[Symbol.asyncierator]():{I:number;next():Promise;};}”不是数组类型或字符串类型。
报告中提到了几个警告,但没有一个能解决我的问题。奇怪的是,它很好用
要编译此示例,需要哪些tsconfig选项?在深入研究该问题后,似乎是由于这里存在多个问题 异步迭代器不能依赖其上下文(例如,
this.i
)访问不属于异步迭代器
接口的属性。这样做不会在当前版本的TypeScript 3.6中编译(即使它在JavaScript中运行良好),因此,为了解决这个问题,我们只剩下:
var asyncIterable = {
[Symbol.asyncIterator]() {
let i = 0;
return {
next() {
if (i < 3) {
return Promise.resolve({ value: i++, done: false });
}
return Promise.resolve({ done: true });
}
};
}
};
next()
方法必须始终返回一个具有值:number
的对象(同样,即使它在JavaScript中工作正常),因此最后我们有:
var asyncIterable = {
[Symbol.asyncIterator]() {
let i = 0;
return {
next() {
if (i < 3) {
return Promise.resolve({ value: i++, done: false });
}
return Promise.resolve({ value: i, done: true });
}
};
}
};
var asyncIterable={
[符号.异步迭代器](){
设i=0;
返回{
下一个(){
如果(i<3){
返回Promise.resolve({value:i++,done:false});
}
返回Promise.resolve({value:i,done:true});
}
};
}
};
没有,很遗憾没有。嗯,{done:true}
没有.value
属性。@Bergi是的,但它不应该有,至少ECMAScript规范不需要它。。。我希望该对象是用类型IteratorResult={value:T;done:boolean;}{value?:未定义;done:true;}
@PatrickRoberts定义的。我认为始终返回相同形状的对象是一个好的做法。@Bergi您会将{value:undefined,done:true}
计算为{value:i++,done:false}
?
var asyncIterable = {
[Symbol.asyncIterator]() {
let i = 0;
return {
next() {
if (i < 3) {
return Promise.resolve({ value: i++, done: false });
}
return Promise.resolve({ done: true });
}
};
}
};
interface IteratorResult<T> {
done: boolean;
value: T;
}
var asyncIterable = {
[Symbol.asyncIterator]() {
let i = 0;
return {
next() {
if (i < 3) {
return Promise.resolve({ value: i++, done: false });
}
return Promise.resolve({ value: i, done: true });
}
};
}
};