[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Object](https://evolu.dev/docs/api-reference/common/Object) › objectFrom

```ts
function objectFrom<K, V>(
  keys: readonly K[],
  getValue: (key: K) => V,
): ReadonlyRecord<K, V>;
```

Defined in: [packages/common/src/Object.ts:222](https://github.com/evoluhq/evolu/blob/dd96d79f1dbe9a49fa12ce8e0aa7d3d0177795ca/packages/common/src/Object.ts#L222)

Creates an object by mapping keys to values.

The inverse of `Object.keys` — instead of extracting keys from an object,
builds an object from keys with a mapper function.

### Example

```ts
import {
  assertEqual,
  assertType,
  objectFrom,
  type ReadonlyRecord,
} from "@evolu/common";

const translations = objectFrom(
  ["en", "fr"] as const,
  (locale): string => `Hello in ${locale}`,
);

assertType<typeof translations, ReadonlyRecord<"en" | "fr", string>>();
assertEqual(translations, {
  en: "Hello in en",
  fr: "Hello in fr",
});
```