我正在编写一个 Flow 类型的 Node.js 模块,如下所示。
hole(obj)
.pipe(fn1)
.pipe(fn2)
.pipe(fn3);
预期的类型定义与类似。
/* Not working */
hole(T)
.pipe((T) => U)
.pipe((U) => V)
.pipe((V) => W)
但我真的不确定是否可以打字。
目前,该函数定义为pipe(fn: (any => any)): Hole
。我认为我需要缩小 any
类型的范围,以便使函数实际返回的内容更加具体。以下是我尝试加强实例方法的类型定义,但失败了。
/* Not working */
class Hole {
pipe(fn: (T => U)): (Hole & {pipe: (U => V)}))
}
JavaScript 类型工具可以吗?如果 Type Script 可以代替 Flow,我将成为 Type Script-er。我也对Java的Stream如何解决这个问题感兴趣。
最佳答案
在 Typescript 和 Flow 中都可以。这是 TypeScript 版本:
declare class Hole<T> {
constructor(p: T);
pipe<R>(fn: (p: T) => R): Hole<R>;
}
new Hole(42)
.pipe(p => p.toString())
.pipe(p => parseInt(p))
.pipe(p => [p])
.pipe(p => p.length)
<强> Typescript Demo
<强> Flow demo
关于typescript - 流类型可以在方法链中加强实例的方法定义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48852611/