Defining a Schema for Required JSON Values in TypeScript
I have a schema that represents a valid JSON (without
I tried to use this with an invalid value:
and to my surprise the output was:
what am I doing wrong?
nullnull or undefinedundefined):import * as S from "@effect/schema/Schema";
export type RequiredJsonPrimitive = string | number | boolean;
export const RequiredJsonPrimitive = S.union(S.string, S.number, S.boolean);
export type RequiredJsonArray =
| RequiredJsonValue[]
| readonly RequiredJsonValue[];
export type RequiredJsonObject = { [Key in string]: RequiredJsonValue };
export type RequiredJsonValue =
| RequiredJsonPrimitive
| RequiredJsonObject
| RequiredJsonArray;
export const RequiredJsonValue: S.Schema<RequiredJsonValue> = S.union(
RequiredJsonPrimitive,
S.array(S.suspend(() => RequiredJsonValue)),
S.record(
S.string,
S.suspend(() => RequiredJsonValue),
),
);
export const RequiredJsonArray = S.array(S.suspend(() => RequiredJsonValue));
export const RequiredJsonObject: S.Schema<RequiredJsonObject> = S.record(
S.string,
S.suspend(() => RequiredJsonValue),
);import * as S from "@effect/schema/Schema";
export type RequiredJsonPrimitive = string | number | boolean;
export const RequiredJsonPrimitive = S.union(S.string, S.number, S.boolean);
export type RequiredJsonArray =
| RequiredJsonValue[]
| readonly RequiredJsonValue[];
export type RequiredJsonObject = { [Key in string]: RequiredJsonValue };
export type RequiredJsonValue =
| RequiredJsonPrimitive
| RequiredJsonObject
| RequiredJsonArray;
export const RequiredJsonValue: S.Schema<RequiredJsonValue> = S.union(
RequiredJsonPrimitive,
S.array(S.suspend(() => RequiredJsonValue)),
S.record(
S.string,
S.suspend(() => RequiredJsonValue),
),
);
export const RequiredJsonArray = S.array(S.suspend(() => RequiredJsonValue));
export const RequiredJsonObject: S.Schema<RequiredJsonObject> = S.record(
S.string,
S.suspend(() => RequiredJsonValue),
);I tried to use this with an invalid value:
const result = S.decodeUnknownSync(RequiredJsonObject)({
foo: new Date()
});
console.log(JSON.stringify(result));const result = S.decodeUnknownSync(RequiredJsonObject)({
foo: new Date()
});
console.log(JSON.stringify(result));and to my surprise the output was:
{"foo":{}}{"foo":{}}what am I doing wrong?
