如何使用 TypeScript 写入文件

使用 fs.writeFileSync() 方法在 TypeScript 中写入文件,例如 writeFileSync(join(__dirname, filename), data)。 该方法将文件的路径、数据和选项对象作为参数,并将提供的内容写入文件。

import { readFileSync, writeFileSync, promises as fsPromises } from 'fs';
import { join } from 'path';

// ✅ 同步写入文件
function syncWriteFile(filename: string, data: any) {
  /**
   * flags:
   *  - w = Open file for reading and writing. File is created if not exists
   *  - a+ = Open file for reading and appending. The file is created if not exists
   */
  writeFileSync(join(__dirname, filename), data, {
    flag: 'w',
  });

  const contents = readFileSync(join(__dirname, filename), 'utf-8');
  console.log(contents); // 👉️ "One Two Three Four"

  return contents;
}

syncWriteFile('./example.txt', 'One\nTwo\nThree\nFour');

// --------------------------------------------------------------

// ✅ 异步写入文件
async function asyncWriteFile(filename: string, data: any) {
  /**
   * flags:
   *  - w = Open file for reading and writing. File is created if not exists
   *  - a+ = Open file for reading and appending. The file is created if not exists
   */
  try {
    await fsPromises.writeFile(join(__dirname, filename), data, {
      flag: 'w',
    });

    const contents = await fsPromises.readFile(
      join(__dirname, filename),
      'utf-8',
    );
    console.log(contents); // 👉️ "One Two Three Four"

    return contents;
  } catch (err) {
    console.log(err);
    return 'Something went wrong';
  }
}

asyncWriteFile('./example.txt', 'One\nTwo\nThree\nFour');

代码片段中的第一个函数同步写入文件。

如果我们尚未安装 node 的 types,请运行以下命令:

$ npm install --save-dev @types/node

如果我们收到 fs 模块的类型声明未找到的错误,请将节点字符串添加到 tsconfig.json 文件中的类型数组。

{
  "compilerOptions": {
    "types": [
      "node"
    ]
  },
}

fs.writeFileSync 方法将文件的路径作为第一个参数,将数据作为第二个参数,将选项对象作为第三个参数。

options 对象中的 flag 属性默认设置为 w,这意味着 – “打开文件进行写入,如果不存在则创建它”。

如果要将数据附加到文件,请改用 a+ 标志,它会打开一个文件进行读取和附加,如果文件不存在,也会创建该文件。

我们可以在 Node.js 文档的此部分中查看其他可用的标志值。

__dirname 变量返回当前模块的目录名。

例如,如果我们在位于 /home/user/my-module.js 的模块中使用 __dirname 变量,则 __dirname 变量将返回 /home/user

我们使用 path.join 方法将当前模块目录的路径与提供的文件名连接起来。

上面的代码片段写入一个名为 example.txt 的文件,该文件与当前模块位于同一目录中。

例如,如果我们正在写入的文件位于上一个目录,我们可以将 ../example.txt 作为参数传递给函数。

或者,我们可以使用 fsPromises 对象异步写入文件。

使用 fsPromises.writeFile() 方法在 TypeScript 中异步写入文件,例如 await fsPromises.writeFile(join(__dirname, filename), data)。该方法将路径和数据作为参数,并将数据异步写入文件。

// ✅ 异步写入文件
async function asyncWriteFile(filename: string, data: any) {
  /**
   * flags:
   *  - w = Open file for reading and writing. File is created if not exists
   *  - a+ = Open file for reading and appending. The file is created if not exists
   */
  try {
    await fsPromises.writeFile(join(__dirname, filename), data, {
      flag: 'w',
    });

    const contents = await fsPromises.readFile(
      join(__dirname, filename),
      'utf-8',
    );
    console.log(contents); // 👉️ "One Two Three Four"

    return contents;
  } catch (err) {
    console.log(err);
    return 'Something went wrong';
  }
}

asyncWriteFile('./example.txt', 'One\nTwo\nThree\nFour');

如果文件已经存在,fsPromises.writeFile 方法将数据异步写入文件替换文件的内容。

如果要追加到文件,请在选项对象中为标志属性的值设置 a+

该方法返回一个 promise ,成功时 undefined 。