【发布时间】:2020-01-03 10:24:42
【问题描述】:
我正在使用 typescript 来构建微服务并处理信号。该代码直到几天前都运行良好,但最近它开始抛出错误。找不到解决此问题的方法。
处理信号的代码。它只是文件的一部分。
src/main.ts
enum signals {
SIGHUP = 1,
SIGINT = 2,
SIGTERM = 15
}
const shutdown = (signal, value) => {
logger.warn("shutdown!")
Db.closeAll()
process.exit(value)
}
Object.values(signals).forEach(signal => {
process.on(signal, () => {
logger.warn(`process received a ${signal} signal`)
shutdown(signal, signals[signal])
})
})
当我执行ts-node src/main.ts 时,会抛出以下错误并退出。
/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:245
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
src/main.ts:35:16 - error TS2769: No overload matches this call.
The last overload gave the following error.
Argument of type 'string | signals' is not assignable to parameter of type 'Signals'.
Type 'string' is not assignable to type 'Signals'.
35 process.on(signal, () => {
~~~~~~
node_modules/@types/node/base.d.ts:653:9
653 on(event: Signals, listener: SignalsListener): this;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The last overload is declared here.
at createTSError (/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:245:12)
at reportTSError (/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:249:19)
at getOutput (/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:362:34)
at Object.compile (/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:395:32)
at Module.m._compile (/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:473:43)
at Module._extensions..js (module.js:663:10)
at Object.require.extensions.(anonymous function) [as .ts] (/home/meraj/.nvm/versions/node/v8.10.0/lib/node_modules/ts-node/src/index.ts:476:12)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
任何修复将不胜感激。或者,如果您能说出为什么它在 2 天前更早地工作而不是现在。
【问题讨论】:
-
process.on()期望它的第一个参数是数字还是字符串?根据文档,它看起来应该是一个字符串。Object.values(signals)返回一个数字数组。我想你想要Object.keys(signals),我猜最近两天的变化是你将枚举值设置为数字而不是常量字符串。 -
只要我说的是很长一段时间都没有改变的枚举,我想也许这个数字会造成问题并将其转换为字符串但仍然没有用。
-
尝试从
Object.values()更改为Object.keys()
标签: javascript node.js typescript signals