12345678910111213141516171819202122232425262728293031 |
- /**
- Define a [lazily evaluated](https://en.wikipedia.org/wiki/Lazy_evaluation) property on an object.
- @param object - Object to add the property to.
- @param propertyName - Name of the property to add.
- @param valueGetter - Called the first time `propertyName` is accessed.
- @example
- ```
- import defineLazyProperty from 'define-lazy-prop';
- const unicorn = {
- // …
- };
- defineLazyProperty(unicorn, 'rainbow', () => expensiveComputation());
- app.on('user-action', () => {
- doSomething(unicorn.rainbow);
- });
- ```
- */
- export default function defineLazyProperty<
- ObjectType extends Record<string, any>,
- PropertyNameType extends string,
- PropertyValueType
- >(
- object: ObjectType,
- propertyName: PropertyNameType,
- valueGetter: () => PropertyValueType
- ): ObjectType & {[K in PropertyNameType]: PropertyValueType};
|