在打字稿中使用 fs

Posted

技术标签:

【中文标题】在打字稿中使用 fs【英文标题】:Use fs in typescript 【发布时间】:2017-08-20 06:16:24 【问题描述】:

我只是尝试使用fs.readFileSync 读取文件,但似乎找不到。

我确保声明了它,并在我的构造函数中添加了它:

export default class Login extends React.Component<LoginProps, > 
    private webAuth: auth0.WebAuth;
    fs: any;

    constructor(props: any, context: any) 
        super(props, context);
        this.fs = require('fs');
        this.webAuth = new auth0.WebAuth(
            clientID: conf.auth0.clientId,
            domain: conf.auth0.domain,
            responseType: 'token id_token',
            redirectUri: `$window.location.origin/login`
        );
    
[...]

并在一个简单的函数中使用它:

verifyToken = (token) => 

    console.log(this.fs);
    let contents = this.fs.readFileSync('../utils/public.key', 'utf8');
    console.log(contents);


但这会引发Uncaught TypeError: _this.fs.readFileSync is not a function。有没有一种特殊的方法可以在 Typescript 中包含 fs

【问题讨论】:

你的Login 组件是浏览器组件,对吧?你为什么要使用fs 模块? 如果您使用的是 wepback,您可以使用 raw-loader 获取文件内容。 【参考方案1】:

我无法想象你会在 React 组件中使用 fs 的任何情况。即使您可以在服务器中使用 React 来渲染内容,但应该在客户端中运行相同的代码,您无法在客户端中访问 fs

如果你想在服务器中使用fs,这是一个例子:

import * as fs from 'fs';
import * as path from 'path';
fs.readFile(path.join(__dirname, '../../client/index.html'), 'utf8', (error, data) => 
        // ...
    )

在您的package.json 文件上,确保对节点有依赖

"dependencies": 
 "@types/node": "^7.0.5"

这就是我的tsconfig.json 文件的样子:


    "compilerOptions": 
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "jsx": "react",
        "allowJs": true,
        "typeRoots": [
            "./node_modules/@types"
        ]
    ,
    "include": [
        "./db/**/*",
        "./src/**/*"
    ]

【讨论】:

fs,在我的例子中,用于打开包含 Auth0 公钥的文件,该公钥用于验证 jwt 令牌。我对 React 还是很陌生,感谢您的建议! npm install @types/node 的命令为我做了。【参考方案2】:

使用node -v 10.15.0 和@types/node:

声明好像被改写了……

fs 定义被声明为module,所以你应该这样做:

import fs from "fs"; // Without star

编译:

var fs_1 = __importDefault(require("fs"));

const fs = require("fs"); 而不是require("fs").default;

加上星号,您将拥有fs.default.TheFunctionYouWant 而不是fs.TheFunctionYouWant

更好的方法是console.log(fs);查看导入的内容。


  "compilerOptions": 
    "typeRoots": [],
    "types": [
      "node"
    ]
  

【讨论】:

【参考方案3】:

最新植入,可以导入方法。

import  readFile, writeFile  from 'fs/promises';

并直接使用...

// write
await writeFile('./file.json', content);

// read
const content = await readFile('./file.json');

参考https://nodejs.org/docs/latest-v14.x/api/

【讨论】:

以上是关于在打字稿中使用 fs的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中解析 JSON 数组

为啥我们在打字稿中使用 HTMLInputElement?

如何在打字稿中使用 C# 字典?

在打字稿中使用角度为 6 的节点短 id 模块

在打字稿中使用 mysql 类型

在打字稿中使用枚举作为接口键