Zu diesem Aufruf passt keine Überladung. Der Typ „String“ kann nicht dem Typ „Signale“ zugewiesen werden.
Lesezeit: 5 Minuten
MA SIDDIQUI
Ich verwende Typoskript, um einen Microservice zu erstellen und auch Signale zu verarbeiten. Der Code funktionierte bis vor ein paar Tagen einwandfrei, aber seit kurzem gibt er Fehler aus. Es konnte keine Lösung für das Problem gefunden werden.
Code zur Verarbeitung von Signalen. Es ist nur ein Teil der Datei. src/main.ts
Wenn ich es tue ts-node src/main.ts Der folgende Fehler wird ausgelöst und beendet.
/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)
Jede Lösung wäre dankbar. Oder wenn Sie sagen können, warum es vor 2 Tagen früher funktionierte und jetzt nicht.
Ist process.on() Erwarten Sie, dass das erste Argument eine Zahl oder eine Zeichenfolge ist? Laut Dokumentation sieht es so aus, als ob es sich um eine Zeichenfolge handeln sollte. Object.values(signals) gibt ein Array von Zahlen zurück. Ich denke, du willst Object.keys(signals)und ich vermute, was sich in den letzten zwei Tagen geändert hat, ist, dass Sie die Enum-Werte auf Zahlen statt auf konstante Zeichenfolgen setzen.
– dx_over_dt
20. September 2019 um 18:20 Uhr
Solange ich über Enum spreche, das sich schon lange nicht mehr geändert hat, dachte ich, dass die Zahl vielleicht ein Problem verursacht, und habe sie in einen String konvertiert, aber es hat immer noch nicht funktioniert.
– MA SIDDIQUI
21. September 2019 um 8:43
Versuchen Sie, von zu wechseln Object.values() Zu Object.keys()
– dx_over_dt
21. September 2019 um 21:46 Uhr
Dies passiert manchmal, wenn Sie einer anonymen Funktion eine falsche Anzahl von Argumenten übergeben haben:
Ich hatte die gleiche Meldung „Keine Überlastung entspricht diesem Anruf.“ Das lag daran, dass ich nicht die richtige Anzahl an Parametern übergeben habe.
– Vesko Vujovic
22. Okt. 2020 um 6:26
Ich hatte auch dieses seltsame Problem, aber ich habe es mithilfe von Typzusicherungen (in meinem Fall mithilfe einer String-Enumeration) umgangen:
(Object.values(someEnum) as string[]).concat(otherStringArray);
Könnten Sie bitte etwas näher erläutern, wie Sie das Problem gelöst haben? Vielleicht könnten Sie bitte auch mit stackoverflow.com/questions/58502778 helfen?
Object.values(signals)
// numeric enum includes reverse mapping, filter numbers out and keep "SIGHUP" etc.
.filter((s): s is NodeJS.Signals => typeof s !== "number")
.forEach(signal => {
process.on(signal, ...) // works now
})
Lösung 2: Verwenden Sie reine Signalzeichenfolgen-Literaltypen
// these string literal items are strongly typed by built-in NodeJS.Signals type
Object.values<NodeJS.Signals>(["SIGHUP", "SIGINT", "SIGTERM"])
.forEach(signal => {
process.on(signal, ...) // works now
})
Lösung 3: Wechseln Sie zu String-Aufzählung (keine umgekehrte Zuordnung)
Dies geschieht, wenn Sie Ihre Typen nicht richtig zuweisen.
Ihr variabler Datentyp MUSS mit dem übergebenen Datentyp übereinstimmen.
organizationList: { id: string; name: string; }[] = [] //if you do this way it type error
organizationList: Organization[] = [] //correct defining method
get Org() {
return this.list.filter((org: Organization) => org.id == this.id) //this data type must defined data type
}
Ein seltsamer Fall, der mir in Bezug auf diese Art von Fehler passiert ist, könnte zum Beispiel sein
weil das zweite Argument in replace ist vom Typ string.
BT
Ich habe einen Typoskriptfehler dieser Art erhalten, als ich eine nicht asynchrone Funktion an eine Methode übergeben habe, die eine asynchrone Funktion erwartet hat.
14526900cookie-checkZu diesem Aufruf passt keine Überladung. Der Typ „String“ kann nicht dem Typ „Signale“ zugewiesen werden.yes
Ist
process.on()
Erwarten Sie, dass das erste Argument eine Zahl oder eine Zeichenfolge ist? Laut Dokumentation sieht es so aus, als ob es sich um eine Zeichenfolge handeln sollte.Object.values(signals)
gibt ein Array von Zahlen zurück. Ich denke, du willstObject.keys(signals)
und ich vermute, was sich in den letzten zwei Tagen geändert hat, ist, dass Sie die Enum-Werte auf Zahlen statt auf konstante Zeichenfolgen setzen.– dx_over_dt
20. September 2019 um 18:20 Uhr
Solange ich über Enum spreche, das sich schon lange nicht mehr geändert hat, dachte ich, dass die Zahl vielleicht ein Problem verursacht, und habe sie in einen String konvertiert, aber es hat immer noch nicht funktioniert.
– MA SIDDIQUI
21. September 2019 um 8:43
Versuchen Sie, von zu wechseln
Object.values()
ZuObject.keys()
– dx_over_dt
21. September 2019 um 21:46 Uhr