Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No overload matches this call. Type 'string' is not assignable to type 'Signals'

I am using typescript to build a microservice and handling signals as well. The code was working fine till a few days ago but recently it started throwing errors. Couldn't find a fix for the issue.

code for handling signals. It is just part of the file. 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])     })   }) 

When I do ts-node src/main.ts The following error throws and exits.

 /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) 

Any fix would be appreciated. Or If you can tell why it was working earlier just 2 days ago and not now.

like image 887
M A SIDDIQUI Avatar asked Aug 30 '19 07:08

M A SIDDIQUI


People also ask

How do you solve no overload matches this call?

The error "No overload matches this call" occurs when we call a function and pass it a parameter that doesn't match any of its specified overloads. To solve the error, make sure the function is being called with the correct number of arguments of the correct type, or use a type assertion.

Is not assignable to parameter of type application?

The error "Argument of type string | undefined is not assignable to parameter of type string" occurs when a possibly undefined value is passed to a function that expects a string . To solve the error, use a type guard to verify the value is a string before passing it to the function.


2 Answers

This sometimes happens when you have passed an incorrect number of arguments to an anonymous function:

    Object.keys(data).reduce((key: string) => {      }, {});  

will raise error:

No overload matches this call. Overload 1 of 3

Pass it the correct number of arguments:

    Object.keys(data).reduce((acc: any, key: string) => {     }, {}); 
like image 150
Daniel Viglione Avatar answered Sep 20 '22 14:09

Daniel Viglione


I also had this strange issue, but I worked around it using type assertions (in my case using a string enum):

(Object.values(someEnum) as string[]).concat(otherStringArray); 
like image 28
kitsu.eb Avatar answered Sep 16 '22 14:09

kitsu.eb