You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
802 B
33 lines
802 B
/** |
|
Define a [lazily evaluated](https://en.wikipedia.org/wiki/Lazy_evaluation) property on an object. |
|
|
|
@param object - Object to add property to. |
|
@param propertyName - Name of the property to add. |
|
@param fn - Called the first time `propertyName` is accessed. |
|
|
|
@example |
|
``` |
|
import defineLazyProp = require('define-lazy-prop'); |
|
|
|
const unicorn = { |
|
// … |
|
}; |
|
|
|
defineLazyProp(unicorn, 'rainbow', () => expensiveComputation()); |
|
|
|
app.on('user-action', () => { |
|
doSomething(unicorn.rainbow); |
|
}); |
|
``` |
|
*/ |
|
declare function defineLazyProp< |
|
ObjectType extends {[key: string]: unknown}, |
|
PropertyNameType extends string, |
|
PropertyValueType |
|
>( |
|
object: ObjectType, |
|
propertyName: PropertyNameType, |
|
fn: () => PropertyValueType |
|
): ObjectType & {[K in PropertyNameType]: PropertyValueType}; |
|
|
|
export = defineLazyProp;
|
|
|