strict-obj
TypeScript icon, indicating that this package has built-in type declarations

0.9.7 • Public • Published

strict-obj

A "Strict Object" behaves just like a JavaScript object, but throws errors when you try to access not-defined properties.

Table of Contents

Installation

npm install strict-obj

Usage

import strictObject from 'strict-obj';

const data = strictObject({ one: "ONE", two: 2 });

// Access properties normally:
console.log(data.one, data.two) // "ONE 2"

// Errors are thrown for not-defined properties:
console.log(data.three) // Error: `three` is not defined

// Properties can be set normally:
data.three = "THREE";
console.log(data.three); // "THREE"

API

strictObject<T>(data: DeepPartial<T>, name?: string, config?: StrictObjectConfig): T

  • data - the data that will be wrapped. Nested objects will be automatically wrapped too. This can be any object, array, or function.
  • name - (default: "strictObject") improves the error message, eg. ReferenceError: strictObject.prop is not defined
  • config
    • ignore: Array<string | symbol> (default []) - an array of keys/symbols to ignore (they will return the raw value, or undefined)
    • shallow (default false) - ignores nested objects
    • throwOnSet (default false) - Normally, you can set any value on a Strict Object, even if not defined. Setting this to true will ensure you can only set properties that are already defined, and an error will be thrown otherwise.

Usage with Jest

When using a StrictObject with certain Jest features (like expect or Snapshots), Jest checks the objects for certain fields (like asymmetricMatch, $$typeof, toJSON, etc).
You can automatically ignore these fields by importing from strict-object/jest like so:

import strictObject from 'strict-object/jest';

it('should ignore jest-specific fields', () => {
  const data = strictObject({ one: 1 });
  expect(data).toMatchInlineSnapshot(`
    Object {
      "one": 1,
    }
  `);
});

Readme

Keywords

none

Package Sidebar

Install

npm i strict-obj

Weekly Downloads

36

Version

0.9.7

License

MIT

Unpacked Size

24.7 kB

Total Files

18

Last publish

Collaborators

  • scott-rippey