在typescript中读写文本文件

wil*_*007 21 node.js typescript

我应该如何从node.js中的typescript读取和写入文本文件?我不确定是否会在node.js中读取/写入一个沙箱文件,如果没有,我相信应该有一种方法来访问文件系统.

bas*_*rat 28

相信应该有一种方法来访问文件系统.

包括node.d.ts使用npm i @types/node(使用tsd tsconfig.json).然后创建一个新npx tsc --init文件(.ts)并创建一个fs文件如下:

import fs from 'fs';
fs.readFileSync('foo.txt','utf8');
Run Code Online (Sandbox Code Playgroud)

您也可以使用其他功能node.d.ts:https://nodejs.org/api/fs.html

更多

节点快速入门:https://basarat.gitbooks.io/typescript/content/docs/node/nodejs.html

  • 使用 ES6 语法,它将是 `import * as fs from 'fs';` (9认同)
  • @WorkingMatt`npm install --save-dev @ types/node` (5认同)
  • 为什么我们在这里使用 require 而不是 import 呢? (3认同)
  • 使用您的代码我得到错误TS2307:找不到模块'fs'.节点v.6.4.0和tsc v.1.8.10.你有什么建议吗? (2认同)
  • @PrimeByDesign只是一个非常老的答案。更新了最新技术 (2认同)

小智 12

import { readFileSync } from 'fs';

const file = readFileSync('./filename.txt', 'utf-8');
Run Code Online (Sandbox Code Playgroud)

这对我有用。您可能需要将第二个命令包装在任何函数中,或者您可能需要在没有关键字的类中声明const

  • “找不到模块‘fs’或其相应的类型声明” (6认同)
  • 您需要在示例中将 filename.txt 放在哪里? (2认同)

小智 7

首先,您将需要为Typescript 安装节点定义。您可以在此处找到定义文件:

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/node.d.ts

获得文件后,只需将引用添加到.ts文件中,如下所示:

/// <reference path="path/to/node.d.ts" />

然后,您可以使用“节点文件系统”模块对可读写的打字稿类进行编码。您的打字稿类myClass.ts如下所示:

/// <reference path="path/to/node.d.ts" />

class MyClass {

    // Here we import the File System module of node
    private fs = require('fs');

    constructor() { }

    createFile() {

        this.fs.writeFile('file.txt', 'I am cool!',  function(err) {
            if (err) {
                return console.error(err);
            }
            console.log("File created!");
        });
    }

    showFile() {

        this.fs.readFile('file.txt', function (err, data) {
            if (err) {
                return console.error(err);
            }
            console.log("Asynchronous read: " + data.toString());
        });
    }
}

// Usage
// var obj = new MyClass();
// obj.createFile();
// obj.showFile();
Run Code Online (Sandbox Code Playgroud)

.ts文件转换为javascript后(如果您不知道如何操作,请在此处查看),您可以使用node运行javascript文件,并使魔术工作:

> node myClass.js
Run Code Online (Sandbox Code Playgroud)

  • 只需使用“npm i --save @types/node”即可安装节点类型 (3认同)

And*_*tos 5

import * as fs from 'fs';
import * as path from 'path';

fs.readFile(path.join(__dirname, "filename.txt"), (err, data) => {
    if (err) throw err;
    console.log(data);
})

Run Code Online (Sandbox Code Playgroud)

编辑:

考虑项目结构:

../readfile/
??? filename.txt
??? src
    ??? index.js
    ??? index.ts
Run Code Online (Sandbox Code Playgroud)

考虑index.ts

import * as fs from 'fs';
import * as path from 'path';

function lookFilesInDirectory(path_directory) {
    fs.stat(path_directory, (err, stat) => {
        if (!err) {
            if (stat.isDirectory()) {
                console.log(path_directory)
                fs.readdirSync(path_directory).forEach(file => {
                    console.log(`\t${file}`);
                });
                console.log();
            }
        }
    });
}

let path_view = './';
lookFilesInDirectory(path_view);
lookFilesInDirectory(path.join(__dirname, path_view));
Run Code Online (Sandbox Code Playgroud)

如果你在 readfile 文件夹中运行tsc src/index.ts && node src/index.js,输出将是:

./
        filename.txt
        src

/home/andrei/scripts/readfile/src/
        index.js
        index.ts
Run Code Online (Sandbox Code Playgroud)

也就是说,这取决于您运行节点的位置。

__dirname是当前模块的目录名。

  • @Daij-Djan 我不这么认为。我确实同意,如果有一些评论,答案会更好,但实际上,这是一个最小但完整的答案。 (2认同)