Hyperlinkv0.8.0-beta.28

Record

Record.mapKeysconsteffect/Record.ts:651
<K extends string, A, K2 extends string>(f: (key: K, a: A) => K2): (
  self: ReadonlyRecord<K, A>
) => Record<K2, A>
<K extends string, A, K2 extends string>(
  self: ReadonlyRecord<K, A>,
  f: (key: K, a: A) => K2
): Record<K2, A>

Maps the keys of a ReadonlyRecord while preserving the corresponding values.

Example (Mapping record keys)

import { Record } from "effect"
import * as assert from "node:assert"

assert.deepStrictEqual(
  Record.mapKeys({ a: 3, b: 5 }, (key) => key.toUpperCase()),
  { A: 3, B: 5 }
)
mapping
Source effect/Record.ts:65122 lines
export const mapKeys: {
  <K extends string, A, K2 extends string>(
    f: (key: K, a: A) => K2
  ): (self: ReadonlyRecord<K, A>) => Record<K2, A>
  <K extends string, A, K2 extends string>(
    self: ReadonlyRecord<K, A>,
    f: (key: K, a: A) => K2
  ): Record<K2, A>
} = dual(
  2,
  <K extends string, A, K2 extends string>(
    self: ReadonlyRecord<K, A>,
    f: (key: K, a: A) => K2
  ): Record<K2, A> => {
    const out: Record<K2, A> = {} as any
    for (const key of keys(self)) {
      const a = self[key]
      out[f(key, a)] = a
    }
    return out
  }
)