在fp-ts中将联合体类型转换为两种类型

时间:2020-09-17 04:23:36

标签: typescript functional-programming union either fp-ts

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

2 个答案:

答案 0 :(得分: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函数

生成的实际类型。

答案 1 :(得分:0)

我发现这是不可能的。

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

问题是,在某一点上您必须对具有泛型类型的实例进行类型检查,但是根本无法在Typescript上执行该操作。