typescript 如何在io-ts中正确键入函数

wz8daaqr  于 2023-02-17  发布在  TypeScript
关注(0)|答案(1)|浏览(104)

我有以下内容:

export const ObjC = Codec.struct({
  name: Codec.string,
  value: Codec.number,
})

export type ObjType = Codec.TypeOf<typeof ObjC>

我想要一个函数来解码这个对象并返回一个错误(不是DecoderError)。类似于:

import { fold } from 'fp-ts/lib/Either'
import { pipe } from 'fp-ts/lib/function'

const decodeObj = async (str: string): Promise<Either<Error, ObjType>> => {
  return pipe(
    ObjC.decode(str),
    fold(err => toError(err), m => m), // This doesn't do want I want
  )
}

我怎样才能用惯用的方法为这个函数返回正确的类型呢?

xxls0lw8

xxls0lw81#

从你列出的返回类型开始,听起来你想在Left时转换到左边的值,而在Right时保持代码不变,在这种情况下,mapLeft帮助函数正是你要找的。
这可以通过以下方式实现:

import { mapLeft } from 'fp-ts/lib/Either';
// -- rest of your code --

const decodeObj = async (str: string): Promise<Either<Error, ObjType>> => {
  return pipe(
    objCodec.decode(str),
    mapLeft(toError),
  );
};

然而,我有一些问题。首先,编写的代码永远不会成功解析,因为输入字符串永远不会匹配对象。我猜还有其他的逻辑你已经忽略了,但就目前的代码看起来有点错误。

相关问题