TypeScript Type inference for async generators

2exbekwf  于 4个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(36)

建议:如果TypeScript能够从异步生成器中推断出类型,那将是非常棒的。以下是有效的JavaScript代码,因此我认为它应该是有效的TypeScript,并且x的类型应该被推断出来。今天它在Parameter 'x' implicitly has 'any' type.上失败了。

// 无效的TypeScript代码
async function* 

async function forever(x) {
for await (const unused of x) {
void unused;
}
}

async function* test() {
for (;;) {
await something();
yield;
}
}

forever(test());

(): any;

// 有效的JavaScript代码
async function* `x`(): any;

🔍 搜索词

async generator, async iterator, type inference, 推断类型

✅ 可实现性检查清单

我的建议满足以下准则:

  • 这不会对现有的TypeScript/JavaScript代码造成破坏性的更改
  • 这不会改变现有JavaScript代码的运行时行为
  • 这可以在不根据表达式的类型发出不同的JS的情况下实现
  • 这不是一个运行时特性(例如库功能、带有JavaScript输出的非ECMAScript语法、JS的新语法糖等)
  • 这个特性将与TypeScript's Design Goals的其他部分保持一致。

⭐ 建议

x的类型视为“任何异步迭代器都会做的”,从而包括任何异步生成器函数。

📃 激励示例

我自己的使用场景...永远/后台(异步)进程/

💻 用例

今天,我需要显式地为这个类型编写代码,这显得有些冗长。从长远来看,它将允许组合异步函数,就像类型推断帮助组合普通函数一样。我知道对于异步可迭代对象/迭代器/生成器进行类型推断会带来很多问题,比如:

hvvq6cgz

hvvq6cgz1#

这听起来像是基于使用场景的推断,在#15114上进行了更广泛的讨论。我们推断可迭代值、异步值,或者特别是异步可迭代变量的类型,但不推断其他类型的值,这将是非常奇怪的。

im9ewurl

im9ewurl2#

☝🏿 这是一张已关闭并锁定的旧票...
我认为部分类型推断(一个异步事物;或一个异步生成器产生任何值)也可能是有用的...

bvhaajcl

bvhaajcl3#

这是一张已经关闭和锁定的旧票...
对,我的意思是,我们不太可能朝这个方向发展,许多相同的问题在这里也是相关的。即使我们能为一个子集解决它,这也是一个相当不一致的推理规则集。

相关问题