我在 MacBook Air 上运行。我安装了 VS Code 作为 IDE,还安装了 TypeScript。
我有一个只有这一行的简单文件:
import fs = require('fs');
我在括号内的“fs”下看到一个红色的波浪线,错误消息是
[ts] Cannot find module 'fs'.
文件的扩展名为.ts。我是JavaScript和TypeScript的新手,但我的印象是fs
是核心模块,所以怎么找不到呢?我该如何解决这个问题?
我已经尝试过的其他事情:
tsc
在命令行上进行编译。我在那里得到一个基本相同的错误:error TS2307: Cannot find module 'fs'.
sudo npm install fs -g
。这报告了明显的成功,但没有解决问题。我浏览了 SE 和网络,但似乎接近的答案似乎都假设“fs”可用。
现在有一种更好的方法,无需使用以前的 tsd 或打字工具。 NPM 现在有用于 typescript 的 @types 包。在此示例中,您需要包
@types/node
:
npm install "@types/node" --save-dev
确保您使用 save-dev 选项仅在开发模式下安装类型,而不是在生产模式下安装。使用 npm install "@types/" 语法时,您应该拥有最新的节点库...
它找不到 fs 包,因为以前的工具类型很可能没有使用最新的 node.d.ts 定义文件。
您的 tsconfig.json 文件需要更新才能找到这些类型的包。 我的示例使用 jquery、jqueryui 和节点类型。假设您也需要适用于您的代码编辑器的语法,在本例中为“atom”代码编辑器
{
"compileOnSave": false,
"compilerOptions": {
"rootDir": "src",
"sourceMap": true,
"target": "es5",
"module": "amd",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"lib": ["es2015", "dom"],
"baseUrl": "./",
"typeRoots": [
"node_modules/@types"
],
"types": [
"jquery",
"jqueryui",
"node"
],
"paths": {
"src/*": ["src/*"]
}
},
"exclude": [
"node_modules",
"dist",
"build"
],
"filesGlob": [
"./src/**/*.ts",
"./test/**/*.ts",
"./typings/index.d.ts",
"./custom_typings/**/*.d.ts",
"./node_modules/@types/**/*.d.ts"
],
"atom": {
"rewriteTsconfig": false
}
}
“fs”是一个核心 Node 模块,我认为您的 import 语句语法有点偏离。尝试:
import * as fs from "fs";
你只需要在 tsconfig.json 中将“moduleResolution”设置为“node”:
{
"compilerOptions": {
...
"moduleResolution": "node"
...
}
}
执行
npm install @types/node --save-dev
现在您可以使用标准的 TypeScript 导入:
import * as fs from "fs";
您在
tsconfig.json
(此处:Node 11+)中有三个选项,请参阅docs:
要么specifiy
typeRoots
和types
,只有typeRoots
或remove完全(推荐):
{"compilerOptions": {
...
"typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work
"types": ["node"] // "types": [] -> won't work
}}
安装类型:
npm install --save-dev @types/node
使用基于承诺的文件系统(例如使用异步/等待):
import {promises as fs} from 'fs';
async function foo() {
...
await fs.writeFile('./yourPath', 'YourContent');
}
我这边的工作
const fs = require('fs') as typeof import('fs');
for nwjs 与 vitejs
const fs = nw.require('fs') as typeof import('fs');
这删除了
any
如果您的文件(脚本)位于以.
尽管安装了
Cannot find module 'fs' or its corresponding type declarations.
,但我遇到了同样的问题(@types/node
)。
我的脚本在 .husky
目录中并添加:
"include": [
"./**/*",
"./.husky/**/*",
],
到
tsconfig.json
解决了问题。
检查你的
tsconfig.json
看看你的include
设置是否不好.
我遇到这个问题是因为我的
tsconfig.json
文件指定了一个 include
列表,该列表 不 包含我有错误的文件。换句话说,TypeScript 没有正确处理该文件。
在我的例子中,我的
include
设置为 ["src"]
,但我的文件位于一个名为 scripts
的子目录中。将include
调整为["scripts", "src"]
后,错误修复。