我正在编写一个Node类型的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如何解决这个问题感兴趣。
答案 0 :(得分:4)
在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)
<强> Flow demo 强>