将 prompt-sync require 转换为 import 方法

Convert prompt-sync require into import method

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

 const prompt = require('prompt-sync')();
 const result = prompt(message);

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

npm i @types/prompt-sync

我试着像

一样使用它
import * as promptSync from 'prompt-sync';
...
const prompt = promptSync();
const result = prompt(message);

但是出现错误

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

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

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

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

但是,有指定和常规化的互操作能力,它通过为包含 module.exports.

值的 CommonJS 模块合成 default 导出来工作

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

首先,确保 "esModuleInterop""compilerOptions" 下的 tsconfig.json 中指定的值为 true

其次,重写代码以从 prompt-sync 模块

导入合成默认值
import promptSync from 'prompt-sync';

const prompt = promptSync();

const result = prompt(message);