【发布时间】:2019-12-13 16:19:59
【问题描述】:
在 TypeScript 中,如果使用类型 @types/node,流只需使用 any 作为类型。这基本上是可行的,但不是最优的,因为通常使用 data 事件发出的内容总是相同的类型,尤其是在使用具有对象模式的流时。
基本上,如果流使用泛型,则可以通过非常简单的方式解决此问题,例如,您可以说:
const passThrough = new PassThrough<Customer>({ objectMode: true });
不幸的是,上述类型不支持这一点。我还发现有 ts-stream 包,它很好地解决了这个问题——但它不能 100% 兼容 Node.js 流。例如,缺少异步迭代器和 destroy 函数。
鉴于我不想从头开始创建类型,我最好的选择是获得标准 Node.js 流,但强类型?有什么“窍门”可以做的吗?
更笼统地说(哈哈):是否有一种既定且合理的方法可以将泛型添加到已经存在的类型中,基本上使用任何类型?
【问题讨论】:
-
您能否添加要增强的类型的具体示例和期望的结果?
-
如前所述,而不是
PassThrough,我希望能够使用PassThrough<T>,然后以类型安全的方式发出T类型的对象,而不是发出@ 类型的数据987654331@. -
“鉴于我不想从头开始创建类型” 您可以从现有类型 stream.d.ts 开始,然后将
chunk: any替换为 @987654333 @ 并将<T = any>附加到该文件中的接口和类;和<T>使用它们的地方。这应该是一个 5 分钟的字符串替换作业。从那里开始,它基于 Typescript 是否可以接受更改,或者是否有一些关于它们的错误。 sry 目前无法在这台计算机上检查自己。 -
令人难以置信的是,过去几年 Node.js 中缺少类型化的流。我希望有人可以将此
<T>添加到所有流中。
标签: javascript node.js typescript