【问题标题】:Convert prompt-sync require into import method将 prompt-sync 要求转换为导入方法
【发布时间】:2021-04-27 08:01:40
【问题描述】:

我在我的 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

【问题讨论】:

    标签: javascript node.js typescript input prompt


    【解决方案1】:

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

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

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

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

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

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

    import promptSync from 'prompt-sync';
    
    const prompt = promptSync();
    
    const result = prompt(message);
    

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2017-01-06
      • 2015-03-27
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2017-03-16
      相关资源
      最近更新 更多