A "Strict Object" behaves just like a JavaScript object, but throws errors when you try to access not-defined properties.
Table of Contents
npm install strict-obj
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"
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, orundefined
)shallow
(defaultfalse
) - ignores nested objectsthrowOnSet
(defaultfalse
) - Normally, you can set any value on a Strict Object, even if not defined. Setting this totrue
will ensure you can only set properties that are already defined, and an error will be thrown otherwise.
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,
}
`);
});