### object · function

Create a fixed-shape object (struct) type wrapper. Unlike `record`, the
keys are part of the schema, so values are stored compactly in key order
without repeating the keys per record. Optional (`E.opt`) fields become
optional properties in the resulting type.

**Signature:** `<const S extends ObjectShape>(shape: S) => TypeWrapper<{ [K in keyof ({ [K in keyof S as undefined extends UnwrapField<S[K]> ? never : K]: UnwrapField<S[K]>; } & { [K in keyof S as undefined extends UnwrapField<...> ? K : never]?: UnwrapField<...>; })]: ({ [K in keyof S as undefined extends UnwrapField<...> ? never ...`

**Type Parameters:**

- `S extends ObjectShape`

**Parameters:**

- `shape: S` - A map of property name → field type wrapper (or literal value).

**Returns:** An object type instance.

**Examples:**

```typescript
const point = E.object({ x: E.number, y: E.number });         // { x: number; y: number }
const entry = E.object({
  at: E.number,
  what: E.or(E.string, point),                                 // string | { x: number; y: number }
  note: E.opt(E.string),                                       // note?: string
});
```
