我遇到了一个错误,指出 Type必须有' [Symbol.iterator]()
'返回迭代器的方法。。它希望在划界线上:
class Test {
private async do() {
const done = [...(await this.test())]; // Here's the error
}
private async *test(): AsyncIterableIterator<string> {
return;
}
}
我在TypeScript GitHub存储库中发现了一些问题,但似乎都没有帮助。他们都建议在lib
添加新条目。我使用es6
目标,并添加了esnext
,dom
和es2018
。这对错误没有任何影响。
我是否会错过更多lib
个条目(我怀疑这些条目是我所使用的条目是否包含所有内容)或者我使用的代码是无效的?
答案 0 :(得分:4)
这帮助了我。 在tsconfig中,添加以下内容:
{
"compilerOptions": {
"lib": [
"es5", "es6", "dom", "dom.iterable"
]
}
}
答案 1 :(得分:1)
尽管语法可能暗示,async生成器函数不是返回生成器的async
函数。
如the proposal所述,
异步生成器函数与生成器函数类似,但有以下区别:
调用时,异步生成器函数返回一个对象,一个异步生成器,其方法(next,throw和return)返回{value,done}的promise,而不是直接返回{value,done}。这会自动使返回的异步生成器对象成为异步迭代器。
它返回异步生成器,而不是promise,所以await
它没有任何好处。
由于异步生成器具有Symbol.asyncIterator
而不是Symbol.iterator
,因此它是不可迭代的迭代器,即它不能使用常规ES6方法(Array.from
,for..of
进行迭代,扩展语法等)。这就是for await..of
被引入的原因。
上面的代码应该是:
const values = [];
for await (const value of this.test()) {
values.push(v);
}
异步迭代器的迭代可以类似于常规迭代器,但不同之处在于next()
返回下一个值的承诺,而不是值本身:
const iterator = this.test();
let next;
while ((next = await iterator.next()).done === false) {
values.push(next.value);
}
由于异步生成器规范是一个提议,因此ES6迭代方法中对异步迭代器的支持可能会发生变化。
答案 2 :(得分:1)
正如我上面所述,遗憾的是,扩展运算符目前不支持异步迭代器。 GitHub中的相关问题是@jedwards1211 said:。
回顾那个问题(减去无关的东西,比如“你可以这样做,哎呀,你不能,不要介意”):
阵列传播运营商支持是否会成为此提案的一部分?
不是这个提案的一部分......另一个提案当然可以在这里考虑新的东西。
我在其他地方没有看到提案(想要@estus's answer?)。在任何情况下,由于它不是JavaScript ESNext的一部分,因此很可能不会添加到TypeScript中。
最可行的替代方案是http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-parse中详述的library(forecast)
library(ggfortify)
AirPassengers_train <- head(AirPassengers, 100)
AirPassengers_test <- tail(AirPassengers, 44)
## Holdout Evaluation
n_train <- length(AirPassengers_train)
n_test <- length(AirPassengers_test)
pred_train <- ts(rnorm(n_train))
pred_test <- ts(rnorm(n_test))
fit <- tslm(AirPassengers_train ~ trend + pred_train)
forecast(fit, newdata = data.frame(pred_train = pred_test)) %>%
accuracy(AirPassengers_test)
#> ME RMSE MAE MPE MAPE MASE
#> Training set 1.135819e-15 30.03715 23.41818 -1.304311 10.89785 0.798141
#> Test set 3.681350e+01 76.39219 55.35298 6.513998 11.96379 1.886546
#> ACF1 Theil's U
#> Training set 0.6997632 NA
#> Test set 0.7287923 1.412804
## tsCV Evaluation
fc_reg <- function(x) forecast(x, newdata = data.frame(pred_train = pred_test),
h = h, model = fit)
tsCV(AirPassengers_test, fc_reg, h = 1)
#> Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#> 1957 NA NA NA NA NA NA NA NA
#> 1958 NA NA NA NA NA NA NA NA NA NA NA NA
#> 1959 NA NA NA NA NA NA NA NA NA NA NA NA
#> 1960 NA NA NA NA NA NA NA NA NA NA NA NA
forecast(AirPassengers_test, newdata = data.frame(pred_train = pred_test),
h = 1, model = fit)
#> Error in forecast.ts(AirPassengers_test, newdata = data.frame(pred_train = pred_test),
#> : Unknown model class
语法。对不起,我无法提供更多帮助。祝你好运!
答案 3 :(得分:0)
如果添加就会出错
"strict": false
在 tsconfig.json 中