decodeUnknownEffect returns an Effect instead of throwing. On success, you get the decoded value. On failure, you get a SchemaError.
import { Effect, Schema } from "effect";
const schema = Schema.Struct({ name: Schema.String, age: Schema.Number,});
const decode = Schema.decodeUnknownEffect(schema);
// Happy pathconst okProgram = decode({ name: "Alice", age: 30 }).pipe( Effect.match({ onSuccess: (value) => { console.log("Decoded Value:", value); }, onFailure: (error) => { console.log("Error Message:", error.message); }, }),);
await Effect.runPromise(okProgram);
// Error pathconst badProgram = decode({ name: 42, age: "30" }, { errors: "all" }).pipe( Effect.match({ onSuccess: (value) => { console.log("Decoded Value:", value); }, onFailure: (error) => { console.log("Error Message:", error.message); console.log("Issue Tree:", error.issue); }, }),);
await Effect.runPromise(badProgram);Use decodeUnknownEffect when you want decoding to stay inside Effect workflows, especially when composing with
other Effects