Hyperlinkv0.8.0-beta.28

Struct

Struct.evolveKeysconsteffect/Struct.ts:373
<S extends object, E extends KeyEvolver<S>>(e: E): (
  self: S
) => KeyEvolved<S, E>
<S extends object, E extends KeyEvolver<S>>(self: S, e: E): KeyEvolved<
  S,
  E
>

Transforms keys of a struct selectively using per-key functions. Keys without a corresponding function are copied unchanged.

When to use

Use when you need computed key names, such as uppercasing or prefixing.

Details

Each transform function receives the key name and must return a new PropertyKey.

Example (Renaming keys with functions)

import { pipe, Struct } from "effect"

const result = pipe(
  { name: "Alice", age: 30 },
  Struct.evolveKeys({
    name: (k) => k.toUpperCase()
  })
)
console.log(result) // { NAME: "Alice", age: 30 }
Source effect/Struct.ts:3739 lines
export const evolveKeys: {
  <S extends object, E extends KeyEvolver<S>>(e: E): (self: S) => KeyEvolved<S, E>
  <S extends object, E extends KeyEvolver<S>>(self: S, e: E): KeyEvolved<S, E>
} = dual(
  2,
  <S extends object, E extends KeyEvolver<S>>(self: S, e: E): KeyEvolved<S, E> => {
    return buildStruct(self, (k, v) => [Object.hasOwn(e, k) ? (e as any)[k](k) : k, v])
  }
)