Can Flow Type可以在方法链中加强实例的方法定义

时间:2018-02-18 14:13:27

标签: typescript flowtype

我正在编写一个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如何解决这个问题感兴趣。

1 个答案:

答案 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)

Typescript Demo

<强> Flow demo