Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Typescript–;所需选项_Javascript_Node.js_Typescript_Async Await_Async Iterator - Fatal编程技术网

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”属性的类型的承诺。
对于target
esnext
,同样的错误

如果完全删除
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 });
      }
    };
  }
};