如何使用 TypeScript 在 VS Code 中查找模块 "fs"?

How to find module "fs" in VS Code with TypeScript?

我 运行 使用 MacBook Air。我将 VS Code 安装为 IDE,还安装了 TypeScript。

我有一个只有这一行的简单文件:

import fs = require('fs');

我在括号内的 'fs' 下方看到一条红色波浪线,错误消息是 [ts] Cannot find module 'fs'. 该文件的扩展名为 .ts。我是 JavaScript 和 TypeScript 的新手,但我的印象是 fs 是一个核心模块,所以怎么找不到呢?我该如何解决这个问题?

我已经尝试过的其他事情:

我在 SE 和网络上四处寻找,但看起来接近的答案似乎都假设 'fs' 可用。

"fs" 是一个核心节点模块,我认为您的 import 语句语法有点偏离。尝试:

import * as fs from "fs";

您需要包含节点的定义文件。

打字稿 2.0+

使用 npm 安装:

npm install --save-dev @types/node

TypeScript < 2.0

如果你使用 typings 那么你可以 运行 这个命令:

typings install dt~node --global --save

或者如果您使用的打字 < 1.0 运行:

typings install node --ambient --save

或者如果所有其他方法都失败了,请手动下载文件 here 并将其包含在您的项目中。

Typescript 了解基于约定的模块,查看 Module resolution 了解更多详情。

另外 IDE 要了解 fs 模块,您必须为节点提供类型。

同时检查这个 github issue

现在有一种更好的方法,无需使用以前的 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
}
}

您只需要在 tsconfig.json:

中将 "moduleResolution" 设置为 "node"
{
  "compilerOptions": {
      ...
      "moduleResolution": "node"
      ...
  }
}

执行

npm install @types/node --save-dev

现在您可以使用标准的 TypeScript 导入:

import * as fs from "fs";

您在 tsconfig.json 中有三个选项(此处:节点 11+),请参阅 docs

指定 typeRootstypes,仅 typeRoots 删除 两行完全(推荐):

{"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');

nwjs 与 vitejs

 const fs = nw.require('fs') as typeof import('fs');

这删除了 ​​any