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

问题描述 投票:0回答:2

我在我的 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
2个回答
12
投票

引发错误是因为您无法调用命名空间导入 (

* as ns
)。此限制符合 ECMAScript 规范,该规范要求模块名称空间对象(例如上述语法创建的对象)不能具有
[[Call]]
[[Construct]]
签名。

当尝试从 ES 模块使用 CommonJS 模块时,这会导致不匹配,因为许多前者导出单个函数或构造函数 as 模块本身(即

module.exports = function () {}
)。

但是,有指定和约定的互操作功能,它通过合成包含

default
值的 CommonJS 模块的
module.exports
导出来工作。

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

首先,确保

"esModuleInterop"
true
下的
tsconfig.json
中指定为
"compilerOptions"
值。

其次,重写代码以从

prompt-sync
模块导入合成默认值

import promptSync from 'prompt-sync';

const prompt = promptSync();

const result = prompt(message);

-1
投票

我已经完成了以下步骤,它对我有用

  1. npm 我提示同步

  2. npm i --save-dev @types/prompt-sync

  3. npm i --save-dev @types/node

  4. 在我的程序中使用以下代码

    导入 PromptSync = require("提示同步"); var提示 = require('提示同步')(); let x =提示(“你多大了?”); 它对我有用

© www.soinside.com 2019 - 2024. All rights reserved.