在下面的代码示例中:
function* gen() {
let v = yield Promise.resolve(0);
return v;
}
v
的类型推断为any
。我想知道是否有一种方法可以根据上下文线索来推断其他类型(例如number
)。
[我知道在这种特定情况下,我可以改用async
/ await
,但我想知道一般情况(当不使用诺言时)。
[不幸的是,Typescript现在不支持此功能。除了在每个yield
语句上简单地添加类型注释之外,似乎没有一个好的解决方法:
function* gen() {
let v: number = yield Promise.resolve(0);
return v;
}
这是一个棘手的问题,因为yield
语句返回的值完全取决于消耗生成器的内容的语义。我知道yield Promise.resolve(0)
最终只会返回数字是因为我知道coroutine
的语义,但是v
确实可以是任何东西。
但是希望Typescript将增加对声明这些关系的支持,作为生成器本身类型的一部分。这是relevant github issue。