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 模块时,这会导致不匹配,因为许多前者导出单个函数或构造函数 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);
我已经完成了以下步骤,它对我有用
npm 我提示同步
npm i --save-dev @types/prompt-sync
npm i --save-dev @types/node
在我的程序中使用以下代码
导入 PromptSync = require("提示同步"); var提示 = require('提示同步')(); let x =提示(“你多大了?”); 它对我有用