无法在 TypeScript 中从 Observable.bindNodeCallback(fs.readFile) 创建 observable

2023-11-27

我正在尝试使用rxjs 5用 TypeScript 编写 Node.js 服务器,但在转换时遇到错误fs.readFile其 rxjs 形式。我希望以下代码可以在 TypeScript 中运行

// This is a JavaScript example from the official documentation. It should
// also work at the TypeScript envrionment.

import * as fs from 'fs';
import { Observable } from 'rxjs';

let readFileAsObservable = Observable.bindNodeCallback(fs.readFile);

// This is the line that throws the error.
let result = readFileAsObservable('./roadNames.txt', 'utf8');

result.subscribe(x => console.log(x), e => console.error(e));

但是,当我添加第二个参数时,我的编辑器报告 TypeScript 错误'utf-8'

Supplied parameters do not match any signature of call target.

我尝试找到有关如何使用的指南fs.readFile()在 rxjs 和 TypeScript 中,但运气不太好。


bindCallback and bindNodeCallback使用 TypeScript 可能会很棘手,因为这完全取决于 TypeScript 如何推断函数参数。

可能有更好的方法,但这就是我所做的,以准确地看到正在推断的内容:将可观察到的东西分配给完全不兼容的东西,并仔细查看受影响的错误。例如,这个:

const n: number = Observable.bindNodeCallback(fs.readFile);

会产生这个错误:

Type '(v1: string) => Observable<Buffer>' is not assignable to type 'number'.

所以很明显 TypeScript 匹配仅路径重载readFile.

在这种情况下,我经常使用箭头函数来准确指定我要使用的重载。例如,这个:

const n: number = Observable.bindNodeCallback((
  path: string,
  encoding: string,
  callback: (error: Error, buffer: Buffer) => void
) => fs.readFile(path, encoding, callback));

会产生这个错误:

Type '(v1: string, v2: string) => Observable<Buffer>' is not assignable to type 'number'.

所以它现在匹配所需的过载,并且以下内容将起作用:

let readFileAsObservable = Observable.bindNodeCallback((
  path: string,
  encoding: string,
  callback: (error: Error, buffer: Buffer) => void
) => fs.readFile(path, encoding, callback));

let result = readFileAsObservable('./package.json', 'utf8');
result.subscribe(
  buffer => console.log(buffer.toString()),
  error => console.error(error)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 TypeScript 中从 Observable.bindNodeCallback(fs.readFile) 创建 observable 的相关文章

随机推荐

  • 如何在云端成功托管用 Python 编写的 Telegram 机器人(免费)?

    我跟着本教程使用 Python 创建 Telegram 机器人 最后 我在我的机器上本地运行它ngrok 为了测试这个机器人 我在 Telegram 中向它发送了消息 有效 所以这是一个很好的教程 但是 现在我想在云端托管机器人 因为我当然
  • Rails/Javascript:如何将 Rails 变量注入(非常)简单的 javascript

    我想在rails中编写一个非常简单的javascript计算器 它将输入字段的数量乘以rails变量中存储的数字 item base price 所以 在 javascript coffeescript 方面 粗略地说是这样的 app as
  • 如何从 C 程序中获得 100% CPU 使用率

    这是一个非常有趣的问题 所以让我来介绍一下场景 我在国家计算博物馆工作 我们刚刚设法让一台 1992 年的 Cray Y MP EL 超级计算机运行起来 我们真的很想看看它能跑多快 我们认为最好的方法是编写一个简单的 C 程序来计算素数并显
  • 在 python 包中添加和读取 config.ini 文件

    我正在编写我的第一个 python 包 我想将其上传到 PyPI 上 我基于此构建了我的代码博客文章 我想将用户设置存储在 config ini 文件中 在同一包中的单独 python 模块中读取一次 每次运行包时 并将用户设置保存在该模块
  • 测试使用会话的 Sinatra 应用程序

    如何测试使用会话的 Sinatra 应用程序 get rack session gt foo gt blah 这段代码对我不起作用 我在我的应用程序中有 启用 会话 看起来问题实际上是有enable sessions活性 您必须停用此设置才
  • 如何在 .Net 中操纵令牌权限?

    我想使用 C 来确定分配给我的进程 线程令牌的权限 并根据需要进行调整 例如 为了让我的程序重新启动计算机 它必须首先启用SeShutdownPrivilege特权 如何通过托管代码安全地完成此操作 事实证明这并不简单 因为没有内置的机制
  • 我使用 AFNetWorking 时出现错误代码 -1011

    我在我们的客户公司做服务 我尝试通过 AFNetWorking 从他们的服务器获取一些信息 我们的客户鼓励使用 AFNetWorking 我使用 AFNetWorking 做了一些示例 并且成功了 但是当我使用我们的客户 URL 之一来获取
  • 如何调用Blazor服务器端CircuitHandler中的方法?

    我正在通过 Blazor 服务器端制作一个聊天室应用程序 我想显示每个用户的在线状态 我问了一个关于如何在关闭页面时获取事件的问题如何在 blazor 服务器端关闭页面时获取事件 现在看来CircuitHandler是最好的选择 当用户关闭
  • Python 快速排序 - 列表理解与递归(分区例程)

    我看了演讲 三个美丽的快速排序 并开始尝试快速排序 我在 python 中的实现与 c 非常相似 选择枢轴 围绕它进行分区并在较小和较大的分区上递归 我以为不是pythonic 这就是在 python 中使用列表理解的实现 def qsor
  • 如何在 Nginx 上使用 FastCGI 防止网关超时

    我正在运行 Django FastCGI 和 Nginx 我正在创建一个 api 人们可以通过 XML 发送一些数据 我将处理这些数据 然后为发送过来的每个节点返回一些状态代码 问题是 如果我处理 XML 的时间太长 我认为超过 60 秒
  • 当我尝试使用 UI Automation for PowerPoint 2013 时,我只能在使用 RangeFromPoint 时获取第一个字符/单词

    该代码适用于 Word 和 Outlook 但不适用于 PowerPoint 因为仅选择文本框的第一个字符或第一个单词 这是一个错误吗 有什么解决方法吗 在 PowerPoint 2013 中的简单 PowerPoint 幻灯片上尝试此操作
  • IOMobileFramebufferGetLayerDefaultSurface 在 iOS 9 上不起作用

    我的主要问题是 如何对已经存在但在新版本的 iOS 中进行了修改的私有 API 函数进行逆向工程 我创建了一个 iOS 应用程序来使用 IOSurface 和 IOMobileFramebuffer 记录屏幕内容 帧缓冲区用于打开它的主要函
  • 如何从单个 Jenkins Pipeline 并行块获取 stdout 和 stderr?

    我正在使用一个parallel阻止到我的 Jenkinsfile 中同时执行一些测试 但所有输出都变得混乱 这是我的 Jenkinsfile 的摘录 例如 do some IT against different databases sta
  • 使用 ramda group by 属性并对指定属性求和结果

    我需要帮助使用 ramda 转换对象数组 我想 按指定属性分组 对另一个属性求和 结果集 给定一个像这样的数组 var arr title scotty age 22 score 54 hobby debugging title scott
  • 如何访问 GridSearchCV 中的 ColumnTransformer 元素

    当引用 grid search 的 param grid 中的 ColumnTransformer 它是管道的一部分 中包含的单个预处理器时 我想找出正确的命名约定 环境和样本数据 import seaborn as sns from sk
  • 将 Windows 时区转换为 moment.js 时区?

    我们在 ASP NET 中有一个应用程序 它以 Windows 格式存储所有用户时区数据 通过 TimeZoneInfo Id 我们还使用 moment js 和 moment js TimeZone 库将 UTC 数据转换为客户端的用户数
  • Gradle 没有以正确的方式寻找依赖关系

    我正在尝试将 moko 添加到 gradle 上的 kotlin multiplataform 的依赖项 org gradle internal resolve ArtifactNotFoundException 找不到 mvvm live
  • 什么是实体?为什么叫实体?

    在谈论实体框架时 什么是实体 它是数据存储的内存中表示 例如 SQL 表 实体足够聪明 可以跟踪更改并将这些更改应用到数据存储中 还有什么其他的吗 它来自系统工程领域 他们使用实体关系图设计系统的工具 他们所做的首先是布置实体 例如客户 采
  • 可以在 Javascript 中比较两个图像吗?

    有没有办法比较两个具有不同文件名的图像文件 所以我想看看它们是否与 javascript 相同 这可能吗 这样做的用途 我有一个图像库需要在灯箱中弹出 当灯箱打开时 我将连接到回调以检查重复的图像 并在找到时将它们从灯箱库中删除 这样用户就
  • 无法在 TypeScript 中从 Observable.bindNodeCallback(fs.readFile) 创建 observable

    我正在尝试使用rxjs 5用 TypeScript 编写 Node js 服务器 但在转换时遇到错误fs readFile其 rxjs 形式 我希望以下代码可以在 TypeScript 中运行 This is a JavaScript ex