javascript - prompt-sync require in Import-Methode umwandeln
Ich verwende das prompt-sync-Modul in meinem Node-Projekt.
const prompt = require('prompt-sync')();
const result = prompt(message);
Aber um meinen TypeScript-Code konsistent zu halten, muss ich import anstelle von require verwenden. Also habe ich Typen für das Paket installiert.
npm i @types/prompt-sync
Und ich habe versucht, es so zu benutzen
import * as promptSync from 'prompt-sync';
...
const prompt = promptSync();
const result = prompt(message);
Aber der Fehler trat auf
Error:(24, 20) TS2349: This expression is not callable.
Type '{ default: (config?: Config | undefined) => Prompt; }' has no call signatures.
Wie kann ich also prompt-sync mit import verwenden?
Antwort #1
Der Fehler wird ausgelöst, weil Sie einen Namespace-Import (* as ns) nicht aufrufen können. Diese Beschränkung ergibt sich aus der ECMAScript-Spezifikation, die vorschreibt, dass Modul-Namespace-Objekte, wie sie durch die oben genannte Syntax erstellt werden, keine [[Call]]- oder [[Construct]]-Signatur haben können.
Dies führt zu einer Diskrepanz, wenn versucht wird, CommonJS-Module aus ES-Modulen zu verwenden, da viele der erstgenannten eine einzelne Funktion oder einen Konstruktor als das Modul selbst exportieren (d. h. module.exports=function() {}).
Es gibt jedoch eine angegebene und konventionalisierte Interoperabilitätsfähigkeit, die funktioniert, indem ein default-Export für das CommonJS-Modul synthetisiert wird, der den Wert von module.exports enthält.
Sie können und sollten diese Interoperabilitätseinrichtung nutzen.
Stellen Sie zunächst sicher, dass "esModuleInterop" mit dem Wert true in Ihrer tsconfig.json unter "compilerOptions" angegeben ist.
Zweitens schreiben Sie Ihren Code um, um das synthetische Standardmodul aus dem prompt-sync Modul zu importieren
import promptSync from 'prompt-sync';
const prompt = promptSync();
const result = prompt(message);
