<const NewFields extends Struct.Fields>(
fields: NewFields
): fieldsAssign<NewFields>Adds fields to a struct schema through a struct-mapping lambda.
When to use
Use to add the same fields to an existing struct or every struct member of a union.
Details
This is a shortcut for MyStruct.mapFields(Struct.assign(fields)).
Example (Adding fields to a union of structs)
import { Schema, Tuple } from "effect"
// Add a new field to all members of a union of structs
const schema = Schema.Union([
Schema.Struct({ a: Schema.String }),
Schema.Struct({ b: Schema.Number })
]).mapMembers(Tuple.map(Schema.fieldsAssign({ c: Schema.Number })))export function function fieldsAssign<
const NewFields extends Struct.Fields
>(fields: NewFields): fieldsAssign<NewFields>
Adds fields to a struct schema through a struct-mapping lambda.
When to use
Use to add the same fields to an existing struct or every struct member of a
union.
Details
This is a shortcut for MyStruct.mapFields(Struct.assign(fields)).
Example (Adding fields to a union of structs)
import { Schema, Tuple } from "effect"
// Add a new field to all members of a union of structs
const schema = Schema.Union([
Schema.Struct({ a: Schema.String }),
Schema.Struct({ b: Schema.Number })
]).mapMembers(Tuple.map(Schema.fieldsAssign({ c: Schema.Number })))
fieldsAssign<const function (type parameter) NewFields in fieldsAssign<const NewFields extends Struct.Fields>(fields: NewFields): fieldsAssign<NewFields>NewFields extends Struct.type Struct<Fields extends Struct.Fields>.Fields = {
readonly [x: string]: Constraint;
readonly [x: number]: Constraint;
readonly [x: symbol]: Constraint;
}
Constraint for a struct field map: an object whose values are schemas.
Fields>(fields: const NewFields extends Struct.Fieldsfields: function (type parameter) NewFields in fieldsAssign<const NewFields extends Struct.Fields>(fields: NewFields): fieldsAssign<NewFields>NewFields) {
return import Struct_Struct_.const lambda: <fieldsAssign<NewFields>>(f: (a: Struct<Struct<Fields extends Struct.Fields>.Fields>) => Struct<{ [K in keyof { [K in keyof (keyof Struct.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)]: (keyof Struct.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)[K]; }]: { [K in keyof (keyof Struct.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)]: (keyof Struct.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)[K]; }[K]; }>) => fieldsAssign<...>Wraps a plain function as a
Lambda
value so it can be used with
When to use
Use to create a typed lambda for struct mapping APIs that need type-level
input and output tracking.
Details
The type parameter L encodes both the input and output types at the type
level, allowing the compiler to track how struct value types change. At
runtime, the returned value is the same function; lambda only adjusts the
type.
Example (Wrapping values in arrays)
import { pipe, Struct } from "effect"
interface AsArray extends Struct.Lambda {
<A>(self: A): Array<A>
readonly "~lambda.out": Array<this["~lambda.in"]>
}
const asArray = Struct.lambda<AsArray>((a) => [a])
const result = pipe({ x: 1, y: "hello" }, Struct.map(asArray))
console.log(result) // { x: [1], y: ["hello"] }
lambda<interface fieldsAssign<NewFields extends Struct.Fields>Adds fields to a struct schema through a struct-mapping lambda.
When to use
Use to add the same fields to an existing struct or every struct member of a
union.
Details
This is a shortcut for MyStruct.mapFields(Struct.assign(fields)).
Example (Adding fields to a union of structs)
import { Schema, Tuple } from "effect"
// Add a new field to all members of a union of structs
const schema = Schema.Union([
Schema.Struct({ a: Schema.String }),
Schema.Struct({ b: Schema.Number })
]).mapMembers(Tuple.map(Schema.fieldsAssign({ c: Schema.Number })))
fieldsAssign<function (type parameter) NewFields in fieldsAssign<const NewFields extends Struct.Fields>(fields: NewFields): fieldsAssign<NewFields>NewFields>>((struct: Struct<Struct.Fields>(parameter) struct: {
Type: Struct.Type<Fields>;
Encoded: Struct.Encoded<Fields>;
DecodingServices: Struct.DecodingServices<Fields>;
EncodingServices: Struct.EncodingServices<Fields>;
Iso: Struct.Iso<Fields>;
fields: Fields;
mapFields: (f: (fields: Struct.Fields) => To, options?: { readonly unsafePreserveChecks?: boolean | undefined } | undefined) => Struct<{ [K in keyof Readonly<To>]: Readonly<To>[K]; }>;
Rebuild: Rebuild;
ast: Ast;
annotate: (annotations: Annotations.Bottom<Struct.ReadonlySide<Struct.Fields, 'Type'>, readonly []>) => Struct<Struct.Fields>;
annotateKey: (annotations: Annotations.Key<Struct.ReadonlySide<Struct.Fields, 'Type'>>) => Struct<Struct.Fields>;
check: (checks_0: SchemaAST.Check<Struct.ReadonlySide<Struct.Fields, 'Type'>>, ...checks: Array<SchemaAST.Check<Struct.ReadonlySide<Struct.Fields, 'Type'>>>) => Struct<Struct.Fields>;
rebuild: (ast: SchemaAST.Objects) => Struct<Struct.Fields>;
make: (input: Struct.ReadonlyMakeIn<Struct.Fields>, options?: MakeOptions) => Struct.ReadonlySide<Struct.Fields, 'Type'>;
makeOption: (input: Struct.ReadonlyMakeIn<Struct.Fields>, options?: MakeOptions) => Option_.Option<Struct.ReadonlySide<Struct.Fields, 'Type'>>;
makeEffect: (input: Struct.ReadonlyMakeIn<Struct.Fields>, options?: MakeOptions) => Effect.Effect<Struct.ReadonlySide<Struct.Fields, 'Type'>, SchemaError, never>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
struct) => struct: Struct<Struct.Fields>(parameter) struct: {
Type: Struct.Type<Fields>;
Encoded: Struct.Encoded<Fields>;
DecodingServices: Struct.DecodingServices<Fields>;
EncodingServices: Struct.EncodingServices<Fields>;
Iso: Struct.Iso<Fields>;
fields: Fields;
mapFields: (f: (fields: Struct.Fields) => To, options?: { readonly unsafePreserveChecks?: boolean | undefined } | undefined) => Struct<{ [K in keyof Readonly<To>]: Readonly<To>[K]; }>;
Rebuild: Rebuild;
ast: Ast;
annotate: (annotations: Annotations.Bottom<Struct.ReadonlySide<Struct.Fields, 'Type'>, readonly []>) => Struct<Struct.Fields>;
annotateKey: (annotations: Annotations.Key<Struct.ReadonlySide<Struct.Fields, 'Type'>>) => Struct<Struct.Fields>;
check: (checks_0: SchemaAST.Check<Struct.ReadonlySide<Struct.Fields, 'Type'>>, ...checks: Array<SchemaAST.Check<Struct.ReadonlySide<Struct.Fields, 'Type'>>>) => Struct<Struct.Fields>;
rebuild: (ast: SchemaAST.Objects) => Struct<Struct.Fields>;
make: (input: Struct.ReadonlyMakeIn<Struct.Fields>, options?: MakeOptions) => Struct.ReadonlySide<Struct.Fields, 'Type'>;
makeOption: (input: Struct.ReadonlyMakeIn<Struct.Fields>, options?: MakeOptions) => Option_.Option<Struct.ReadonlySide<Struct.Fields, 'Type'>>;
makeEffect: (input: Struct.ReadonlyMakeIn<Struct.Fields>, options?: MakeOptions) => Effect.Effect<Struct.ReadonlySide<Struct.Fields, 'Type'>, SchemaError, never>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
struct.Struct<Struct.Fields>.mapFields<{ [K in keyof (keyof Struct<Fields extends Struct.Fields>.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)]: (keyof Struct<Fields extends Struct.Fields>.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)[K]; }>(f: (fields: Struct.Fields) => { [K in keyof (keyof Struct<Fields extends Struct.Fields>.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)]: (keyof Struct<Fields extends Struct.Fields>.Fields & keyof NewFields extends never ? Struct.Fields & NewFields : Omit<Struct.Fields, keyof Struct.Fields & keyof NewFields> & NewFields)[K]; }, options?: {
...;
} | undefined): Struct<...>
Returns a new struct with the fields modified by the provided function.
Details
Options:
-
unsafePreserveChecks - if true, keep any .check(...) constraints
that were attached to the original union. Defaults to false.
Warning: This is an unsafe operation. Since mapFields
transformations change the schema type, the original refinement functions
may no longer be valid or safe to apply to the transformed schema. Only
use this option if you have verified that your refinements remain correct
after the transformation.
mapFields(import Struct_Struct_.const assign: {
<O extends object>(that: O): <S extends object>(
self: S
) => Assign<S, O>
<O extends object, S extends object>(
self: S,
that: O
): Assign<S, O>
}
assign(fields: const NewFields extends Struct.Fieldsfields)))
}