如何让 TypeScript 自动推断 `yield` 调用结果的类型?
How can I get TypeScript to automatically infer the type of the result of a `yield` call?
在下面的代码示例中:
function* gen() {
let v = yield Promise.resolve(0);
return v;
}
v
的类型被推断为 any
。我想知道是否有办法让它根据上下文线索推断出不同的类型(例如,number
)。
我知道在这种特定情况下我可以使用 async
/await
,但我想知道一般情况(不使用 promises 时)。
不幸的是,Typescript 现在不支持这个。除了简单地在每个 yield
语句上放置类型注释之外,似乎没有真正好的解决方法:
function* gen() {
let v: number = yield Promise.resolve(0);
return v;
}
这是一个棘手的问题,因为 return 由 yield
语句编辑的值完全取决于使用生成器的任何内容的语义。我知道 yield Promise.resolve(0)
最终会 return 一个数字,只是因为我知道 coroutine
的语义,但 v
真的可以是任何东西。
但希望 Typescript 将添加对将这些关系声明为生成器本身类型的一部分的支持。这是 relevant github issue.
在下面的代码示例中:
function* gen() {
let v = yield Promise.resolve(0);
return v;
}
v
的类型被推断为 any
。我想知道是否有办法让它根据上下文线索推断出不同的类型(例如,number
)。
我知道在这种特定情况下我可以使用 async
/await
,但我想知道一般情况(不使用 promises 时)。
不幸的是,Typescript 现在不支持这个。除了简单地在每个 yield
语句上放置类型注释之外,似乎没有真正好的解决方法:
function* gen() {
let v: number = yield Promise.resolve(0);
return v;
}
这是一个棘手的问题,因为 return 由 yield
语句编辑的值完全取决于使用生成器的任何内容的语义。我知道 yield Promise.resolve(0)
最终会 return 一个数字,只是因为我知道 coroutine
的语义,但 v
真的可以是任何东西。
但希望 Typescript 将添加对将这些关系声明为生成器本身类型的一部分的支持。这是 relevant github issue.