<
S extends object,
const M extends { readonly [K in keyof S]?: PropertyKey }
>(
mapping: M
): (self: S) => {
[K in keyof S as K extends keyof M
? M[K] extends PropertyKey
? M[K]
: K
: K]: S[K]
}
<
S extends object,
const M extends { readonly [K in keyof S]?: PropertyKey }
>(
self: S,
mapping: M
): {
[K in keyof S as K extends keyof M
? M[K] extends PropertyKey
? M[K]
: K
: K]: S[K]
}Renames keys in a struct using a static { oldKey: newKey } mapping. Keys
not mentioned in the mapping are copied unchanged.
When to use
Use when you need simple, declarative key renaming without custom logic.
Details
For computed key names, use evolveKeys instead.
Example (Renaming keys)
import { pipe, Struct } from "effect"
const result = pipe(
{ firstName: "Alice", lastName: "Smith", age: 30 },
Struct.renameKeys({ firstName: "first", lastName: "last" })
)
console.log(result) // { first: "Alice", last: "Smith", age: 30 }export const const renameKeys: {
<
S extends object,
const M extends {
readonly [K in keyof S]?: PropertyKey
}
>(
mapping: M
): (self: S) => {
[K in keyof S as K extends keyof M
? M[K] extends PropertyKey
? M[K]
: K
: K]: S[K]
}
<
S extends object,
const M extends {
readonly [K in keyof S]?: PropertyKey
}
>(
self: S,
mapping: M
): {
[K in keyof S as K extends keyof M
? M[K] extends PropertyKey
? M[K]
: K
: K]: S[K]
}
}
Renames keys in a struct using a static { oldKey: newKey } mapping. Keys
not mentioned in the mapping are copied unchanged.
When to use
Use when you need simple, declarative key renaming without custom logic.
Details
For computed key names, use
evolveKeys
instead.
Example (Renaming keys)
import { pipe, Struct } from "effect"
const result = pipe(
{ firstName: "Alice", lastName: "Smith", age: 30 },
Struct.renameKeys({ firstName: "first", lastName: "last" })
)
console.log(result) // { first: "Alice", last: "Smith", age: 30 }
renameKeys: {
<function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S extends object, const function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M extends { readonly [function (type parameter) KK in keyof function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S]?: type PropertyKey =
| string
| number
| symbol
PropertyKey }>(
mapping: const M extends { readonly [K in keyof S]?: PropertyKey; }mapping: function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M
): (self: S extends objectself: function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S) => { [function (type parameter) KK in keyof function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S as function (type parameter) KK extends keyof function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M ? function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M[function (type parameter) KK] extends type PropertyKey =
| string
| number
| symbol
PropertyKey ? function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M[function (type parameter) KK] : function (type parameter) KK : function (type parameter) KK]: function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(mapping: M): (self: S) => { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S[function (type parameter) KK] }
<function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S extends object, const function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M extends { readonly [function (type parameter) KK in keyof function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S]?: type PropertyKey =
| string
| number
| symbol
PropertyKey }>(
self: S extends objectself: function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S,
mapping: const M extends { readonly [K in keyof S]?: PropertyKey; }mapping: function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M
): { [function (type parameter) KK in keyof function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S as function (type parameter) KK extends keyof function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M ? function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M[function (type parameter) KK] extends type PropertyKey =
| string
| number
| symbol
PropertyKey ? function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }M[function (type parameter) KK] : function (type parameter) KK : function (type parameter) KK]: function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): { [K in keyof S as K extends keyof M ? M[K] extends PropertyKey ? M[K] : K : K]: S[K]; }S[function (type parameter) KK] }
} = import dualdual(2, <function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): anyS extends object, const function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): anyM extends { readonly [function (type parameter) KK in keyof function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): anyS]?: type PropertyKey =
| string
| number
| symbol
PropertyKey }>(self: S extends objectself: function (type parameter) S in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): anyS, mapping: const M extends { readonly [K in keyof S]?: PropertyKey; }mapping: function (type parameter) M in <S extends object, const M extends { readonly [K in keyof S]?: PropertyKey; }>(self: S, mapping: M): anyM) => {
return function buildStruct<S, (k: keyof S, v: S[keyof S]) => [PropertyKey | keyof S, S[keyof S]]>(source: S, f: (k: keyof S, v: S[keyof S]) => [PropertyKey | keyof S, S[keyof S]]): anyWalk source; for each key decide what to emit via the small callback.
The callback returns either
• undefined → nothing is copied, or
• [newKey, newVal]
so every public API just supplies a different callback.
buildStruct(self: S extends objectself, (k: keyof Sk, v: S[keyof S]v) => [var Object: ObjectConstructorProvides functionality common to all JavaScript objects.
Object.ObjectConstructor.hasOwn(o: object, v: PropertyKey): booleanDetermines whether an object has a property with the specified name.
hasOwn(mapping: const M extends { readonly [K in keyof S]?: PropertyKey; }mapping, k: string | number | symbolk) ? mapping: const M extends { readonly [K in keyof S]?: PropertyKey; }mapping[k: keyof Sk]! : k: keyof Sk, v: S[keyof S]v])
})