如何为具有可选属性的对象创建Eq ?

  • 本文关键字:对象 创建 Eq 属性 fp-ts
  • 更新时间 :
  • 英文 :


我正在尝试为具有可选属性的对象创建Eq。到目前为止,我已经尝试了以下操作:

type Thing = { a: string; b?: string };
const eqThing = Eq.struct<Thing>({
a: S.Eq,
b: S.Eq // Type 'Eq<string>' is not assignable to type 'Eq<string | undefined>'.
});
eqThing.equals({ a: "a", b: "b" }, { a: "a" }); // false

我认为一定有一种方法来指定bEq<string | undefined>,但我不确定如何。

这可以通过使用Eq.eqStrict来实现。

type Thing = { a: string; b?: string };
const partialStruct = Eq.struct<Thing>({
a: S.Eq,
b: Eq.eqStrict
});
expect(partialStruct.equals({ a: "a", b: "b" }, { a: "a" })).toBe(false);
expect(partialStruct.equals({ a: "a", b: "b" }, { a: "a", b: "b" })).toBe(true);

我也遇到过这种情况。我的解决方案是创建一个辅助函数:

export const getOptionalEq = <A>(eqElement: Eq<A>): Eq<A | undefined> =>
fromEquals((x, y) =>
x === undefined || y === undefined ? x === y : eqElement.equals(x, y)
);

可以这样使用:

type Thing = { a: string; b?: string };
const eqThing = Eq.struct<Thing>({
a: S.Eq,
b: getOptionalEq(S.Eq)
});

相关内容

  • 没有找到相关文章

最新更新