javascript - Aucune surcharge ne correspond à cet appel. Le type 'string' n'est pas assignable au type 'Signals'


J'utilise TypeScript pour créer un microservice et gérer les signaux également. Le code fonctionnait bien jusqu'à il y a quelques jours, mais récemment il a commencé à générer des erreurs. Je n'ai pas pu trouver de solution au problème.

code pour gérer les signaux. Ce n'est qu'une partie du fichier. 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])
    })
  })

Lorsque je fais ts-node src/main.ts, l'erreur suivante se produit et le programme se termine.

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

Toute solution serait appréciée. Ou si vous pouvez expliquer pourquoi cela fonctionnait il y a seulement 2 jours et pas maintenant.

Réponse #1

Cela arrive parfois lorsque vous avez passé un nombre incorrect d'arguments à une fonction anonyme :

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

    }, {}); 

provoquera une erreur :

Aucune surcharge ne correspond à cet appel. Surcharge 1 sur 3

Passez-lui le nombre correct d'arguments :

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

Réponse #2

J'ai également eu ce problème étrange, mais je l'ai contourné en utilisant des assertions de type (dans mon cas en utilisant un enum de chaînes) :

(Object.values(someEnum) as string[]).concat(otherStringArray);