1

在打字稿中,如何将联合类型A|B转换为fp-tsEither<A,B>感觉很自然,必须有一种很好的方法。

4

2 回答 2

1

我发现这是不可能的。

我最初的想法是,因为unionEither类型都是求和类型,所以它们在代数上是相等的。因此,必须有一种自然而美好的方式来相互转化。

问题是,有时您必须对具有泛型类型的实例进行类型检查,但在 Typescript 上根本无法做到这一点。

于 2020-09-23T10:23:23.927 回答
0

假设您有一个类型number | string,您可以执行以下操作:

import * as E from 'fp-ts/lib/Either'
import * as F from 'fp-ts/lib/function'

const toEither = F.flow(
    E.fromPredicate(
        x => typeof x === 'string', // Assuming that string is the Right part
        F.identity
    ),
)

这将产生:

toEither(4) 
{ _tag: 'Left', left: 4 }
toEither('Foo')
{ _tag: 'Right', right: 'Foo' }

请记住,Either它不用于拆分联合类型,而是将错误路径和结果的快乐路径包装在一种类型中。

我只通过ts-node检查了上面的代码。我还没有看到 TS 为toEither函数生成的实际类型

于 2020-09-23T09:45:43.793 回答