遍历node.js进程事件时,没有重载匹配此调用

时间:2020-04-21 00:57:01

标签: node.js typescript

我正在使用一个默认添加uncaughtExceptionunhandledRejection侦听器的库。我希望将其删除。

这是我的代码:

["unhandledRejection", "uncaughtException"].forEach((eventName) =>
  process
    .listeners(eventName)
    .map((handler) => process.off(eventName, handler))
  );

TypeScript给我这个错误:

No overload matches this call.
  The last overload gave the following error.
    Argument of type 'string' is not assignable to parameter of type 'Signals'.

看看global.d.ts附带的@types/node,我发现声明是这样写的:

listeners(event: "uncaughtException"): UncaughtExceptionListener[];
listeners(event: "unhandledRejection"): UnhandledRejectionListener[];
listeners(event: Signals): SignalsListener[];

因此,看来TypeScript编译器认为我希望使用event: Signals函数签名。这不是我想要的!

是否可以告诉TypeScript我要使用哪一个?还是以其他方式解决问题?

1 个答案:

答案 0 :(得分:0)

如果您查看UnhandledRejectionListener,就会发现它的定义如下:

type UnhandledRejectionListener = (reason: {} | null | undefined, promise: Promise<any>) => void;

具有两个参数-并且由于SignalsListener的定义如下:

type SignalsListener = (signal: Signals) => void;

typescript假定您要使用SignalsListener类型。

要使其正常工作,您必须传递类型为UnhandledRejectionListener的处理程序