我是打字稿的初学者,目前正在学习它。我在导入和导出自定义函数(我制作的)时遇到了问题。所以基本上,我所做的就是制作 index.ts 文件并编写以下代码:
export function sayHi(): void {
console.log("Hiiii!");
}
然后我制作了另一个文件(file2.ts)并编写了以下代码:
import {sayHi} from './index.js';
sayHi();
现在,这段代码运行得很好......(没有 tsconfig 和 package.json 文件)。 然后,我必须安装询问器,所以我使用以下命令创建了 tsconfig 文件:
tsc init
在目录中创建我的 tsconfig 文件后,代码仍然可以正常工作...... 我的 tsconfig 文件:
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
但是当我使用以下方法创建 package.json 文件时:
npm init --yes
然后,它给了我错误:
D:\Courses\GI-AIWMD\Programming\Practice2>node file2.js 文件:///D:/Courses/GI-AIWMD/Programming/Practice2/file2.js:2 Object.defineProperty(exports, "__esModule", { value: true }); ^
ReferenceError:导出未在 ES 模块范围中定义 该文件被视为 ES 模块,因为它具有“.js”文件扩展名,并且“D:\Courses\GI-AIWMD\Programming\Practice2\package.json”包含“type”:“module”。要将其视为 CommonJS 脚本,请将其重命名为使用“.cjs”文件扩展名。 在文件:///D:/Courses/GI-AIWMD/Programming/Practice2/file2.js:2:23 在 ModuleJob.run (节点:内部/模块/esm/module_job:218:25) 在异步 ModuleLoader.import (节点:内部/模块/esm/loader:329:24) 在异步 loadESM 处(节点:内部/进程/esm_loader:34:7) 在异步handleMainPromise(节点:内部/模块/run_main:113:12)
Node.js v20.10.0
我的package.json文件:
{
"name": "practice2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type":"module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
注意:我尝试设置类型:commonjs,它工作正常,然后代码正在运行,但我无法使用询问器包,所以我无法将类型设置为commonjs,它应该保持类型:模块...
请按照以下步骤操作:
用于模块导入安装 npm install @types/node --save-dev