首页 > 解决方案 > 为什么 fs.open 返回一个数字?

问题描述

我正在尝试使用节点/打字稿来使用以下代码读取文件:

const openFile = util.promisify(fs.open);
write(data: Buffer, index: number) {
    if (!checkPieceIntegrity(data, this.pieceMap[index])) {
        return false;
    } else {
        return openFile(this.path, "r+")
            .then(fd => {
                const writeStream = createWriteStream(fd, {
                    flags: "r+",
                    start: index * this.pieceLength,
                    autoClose: true,
                })

                return util.promisify(writeStream.write)(data);
            })


    }
}

但是当我尝试编译时,tsc我得到了错误:

Argument of type 'number' is not assignable to parameter of type 'PathLike'.

参考这一行:

const writeStream = createWriteStream(fd, {.

node.js 文档说fs.open返回一个文件描述符,而不是一个数字,那么为什么打字稿认为fd是一个数字,我怎样才能让它识别为一个文件描述符?

标签: node.jstypescriptfs

解决方案


fs.open返回一个文件描述符(作为一个整数)。但是createWriteStream接收 a<string> | <Buffer> | <URL>作为它的第一个参数,而不是文件描述符。

检查fs.write是否有接收文件描述符并允许写入文件的函数。


推荐阅读