0

尝试验证和解码 api 响应:

const Foo  = t.type({
    id: t.number,
    date: DateFromISOString,
  });

  type FooType = t.TypeOf<typeof Foo>;
  const jsonFoo: FooType = {"id": 1, date: "2021-02-05T11:13:22.520Z"};
  const resultFoo = Foo.decode(jsonFoo);

问题是该类型将数据属性描述为日期,而它是jsonFoo中的字符串

我是否错过了那里的某些东西,或者我需要两种类型的传入数据和解码对象?

4

1 回答 1

2

您可以简单地使用“union”函数并合并 DateFromISOString 和字符串类型。

const Foo = t.type({
      id: t.number,
      date: t.union([DateFromISOString, t.string]),
    });

我发现的另一个解决方案是:

从字符串构建一个 Date 实例,然后使用“toISOString”辅助函数再次将其传递给字符串。

const Foo = type({
      id: number,
      date: DateFromISOString,
    });

type FooType = TypeOf<typeof Foo>;
const jsonFoo: FooType = { id: 1, date: new Date("2021-02-05T11:13:22.520Z") };
const resultFoo = Foo.decode(jsonFoo);

const input = jsonFoo.date.toISOString();

assert.deepStrictEqual(input, right(jsonFoo.date)); // fails
assert.deepStrictEqual(DateFromISOString.decode(input), right(jsonFoo.date)); // success
于 2021-02-05T18:37:49.747 回答