Spaces:
Sleeping
Sleeping
File size: 484 Bytes
56fda74 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
let weakMemoize = function <Arg extends object, Return>(
func: (arg: Arg) => Return
): (arg: Arg) => Return {
let cache = new WeakMap<Arg, Return>()
return (arg: Arg) => {
if (cache.has(arg)) {
// Use non-null assertion because we just checked that the cache `has` it
// This allows us to remove `undefined` from the return value
return cache.get(arg)!
}
let ret = func(arg)
cache.set(arg, ret)
return ret
}
}
export default weakMemoize
|