将 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);
我在我的 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
.
default
导出来工作
您可以而且应该利用此互操作工具。
首先,确保 "esModuleInterop"
在 "compilerOptions"
下的 tsconfig.json
中指定的值为 true
。
其次,重写代码以从 prompt-sync
模块
import promptSync from 'prompt-sync';
const prompt = promptSync();
const result = prompt(message);