typescript - 流类型可以在方法链中加强实例的方法定义吗

标签 typescript flowtype

我正在编写一个 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/

相关文章:

typescript - 如何在 Angular 6+ 的 mat-paginator 中更改 itemsPerPageLabel

angular - 如何将 ngFor 循环的索引值传递给组件?

javascript - 在类本身中初始化 TypeScript 变量与在构造函数中初始化变量之间的区别

javascript - 在 ReactJS 中添加指向 Font Awesome 图标的链接

javascript - 精确的对象类型定义和解构

flowtype - 流动。如何根据函数参数指定联合类型

javascript - `Experimental decorator usage` 的流类型消除警告

javascript - 如何注释作为对象属性的函数?

javascript - 什么是 "types first"流架构?

javascript - 如何使用 Typescript 从 react-router-dom 访问路由参数?前 : `/some-route/:slug`