我如何获得TypeScript来自动推断`yield`调用结果的类型?

问题描述 投票:6回答:1

在下面的代码示例中:

function* gen() {
    let v = yield Promise.resolve(0);
    return v;
}

v的类型推断为any。我想知道是否有一种方法可以根据上下文线索来推断其他类型(例如number)。

[我知道在这种特定情况下,我可以改用async / await,但我想知道一般情况(当不使用诺言时)。

typescript generator type-inference yield
1个回答
2
投票

[不幸的是,Typescript现在不支持此功能。除了在每个yield语句上简单地添加类型注释之外,似乎没有一个好的解决方法:

function* gen() {
    let v: number = yield Promise.resolve(0);
    return v;
}

这是一个棘手的问题,因为yield语句返回的值完全取决于消耗生成器的内容的语义。我知道yield Promise.resolve(0)最终只会返回数字是因为我知道coroutine的语义,但是v确实可以是任何东西。

但是希望Typescript将增加对声明这些关系的支持,作为生成器本身类型的一部分。这是relevant github issue

© www.soinside.com 2019 - 2024. All rights reserved.