在打字稿中,如何将联合类型A|B
转换为 fp-ts 的Either<A,B>
?感觉很自然,必须有一种不错的方法。
答案 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)
我发现这是不可能的。
我最初的想法是,由于union
和Either
类型都是和类型,因此它们在代数上相等。因此,必须有一种自然而美好的相互转化方式。
问题是,在某一点上您必须对具有泛型类型的实例进行类型检查,但是根本无法在Typescript上执行该操作。