create-lazy-object
Version:
Lazily loaded objects with properties computed at get-time.
71 lines (46 loc) • 1.82 kB
Markdown
object literal using a utility to lazily compute properties on access.
The first access to the property is cached, and then reused for subsequent accesses.
The first way is to use `createLazyObject`. This method returns a new object with the lazy properties added in an immutable way.
```ts
const lazyObject = createLazyObject({
test: () => {
console.log("Doing something expensive...");
return 42;
},
});
// Output: 42
console.log(lazyObject.test);
```
You can even merge another object into the lazy object:
```ts
const lazyObject = createLazyObject(
{
test: () => {
console.log("Doing something expensive...");
return 42;
},
},
{ test2: "Not lazy" },
);
```
The second way is to use `injectLazyProp`. This method will mutate the object passed into it, unlike `createLazyObject`. It does not return anything.
```ts
const object = {
test: "hello",
};
injectLazyProp(object, "test2", () => "there!");
// Output: "there!"
console.log(object.test2);
```
This package is one of the most type-safe packages around lazy property creation.
The `createLazyObject` return type signature is inferred from the return type of all the getter functions.
The `injectLazyProp` function asserts the type signature of objects passed into it, which means not only does it inject the property at runtime, but at the type level too.
Check out a pre-configured playground [here](https://stackblitz.com/edit/stackblitz-starters-pyenggnw?file=src%2Findex.ts) and give create-lazy-object a spin!
This package is distributed with ESM syntax only.
I apologise in advance for any inconvenience this may cause.
A tiny zero-dependency package that lets you define an