我可以让 TypeScript 更好地理解联合中的这个生成器吗?

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

在此示例中:

type Union = () => Generator<undefined, void, number> | void;

function callbacker(_callback: Union) {}

callbacker(function* () {
    const value = yield;
});

TypeScript 错误:

'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.

如果我从联合体中删除

void
,它会起作用,但我真的需要那里有空。

有什么方法可以让它在不接触

callbacker
的呼叫的情况下工作吗?这是库的一部分,我希望用户能够自动推理。

typescript generator yield union-types
1个回答
0
投票

您可以像这样使用函数重载:

type Union = () => Generator<undefined, void, number> | void;

function callbacker(_callback: () => Generator<undefined, void, number>): void;
function callbacker(_callback: () => void): void;
function callbacker(_callback: Union) {}

callbacker(function* () {
    const value = yield;
});
© www.soinside.com 2019 - 2024. All rights reserved.