如何在打字稿中键入生成器函数

时间:2020-05-02 11:58:59

标签: typescript

我有此代码:

export const runWithCancel = <R, TNext>(fn: Generator<unknown, R, TNext>) => {
  const gen = fn();
};

但是我得到

This expression is not callable.
  Type 'Generator<unknown, R, TNext>' has no call signatures.

如何在打字稿中键入生成器

2 个答案:

答案 0 :(得分:0)

生成器函数是将返回生成器的函数。在您的情况下,runWithCancel是生成器,而不是生成器函数。

尝试以下操作:

export const runWithCancel = <R, TNext>(fn: () => Generator<unknown, R, TNext>) => {
  const gen = fn();
};

答案 1 :(得分:0)

GeneratorGeneratorFunction的结果。如果fn是一个函数,那么我认为fn的类型将是GeneratorFunction,而gen的类型将是Generator

export const runWithCancel = <R, TNext>(fn: GeneratorFunction) => {
  const gen = fn() as Generator<unknown, R, TNext>;
};