将提示同步要求转换为导入方法

Арт*_*иев 6 javascript prompt input node.js typescript

我在我的 Node 项目中使用prompt-sync 模块。

 const prompt = require('prompt-sync')();
 const result = prompt(message);
Run Code Online (Sandbox Code Playgroud)

但为了保持 TypeScript 代码的一致性,我需要import使用 require. 所以我安装了包的类型。

npm i @types/prompt-sync
Run Code Online (Sandbox Code Playgroud)

我尝试像这样使用它

import * as promptSync from 'prompt-sync';
...
const prompt = promptSync();
const result = prompt(message);
Run Code Online (Sandbox Code Playgroud)

但是出现了错误

Error:(24, 20) TS2349: This expression is not callable.
Type '{ default: (config?: Config | undefined) => Prompt; }' has no call signatures.
Run Code Online (Sandbox Code Playgroud)

那么我该如何使用提示同步呢import?

Alu*_*dad 13

引发该错误的原因是您无法调用名称空间导入 ( * as ns)。此限制符合 ECMAScript 规范,该规范要求模块名称空间对象(例如上述语法创建的对象)不能具有[[Call]]或[[Construct]]签名。

当尝试从 ES 模块使用 CommonJS 模块时,这会导致不匹配,因为许多前者将单个函数或构造函数导出为模块本身(即module.exports = function () {})。

然而,有指定和约定的互操作功能,它通过合成default包含 值的 CommonJS 模块的导出来工作module.exports。

您可以而且应该利用此互操作工具。

首先,确保在您的under中"esModuleInterop"指定了值。truetsconfig.json"compilerOptions"

其次,重写代码以从prompt-sync模块导入合成默认值

import promptSync from 'prompt-sync';

const prompt = promptSync();

const result = prompt(message);
Run Code Online (Sandbox Code Playgroud)