Memo
TypeScript Integration
Type inference, generics, and type-safe memoization patterns.
Type Inference
Automatic Type Inference
import { memoize } from '@ontologyio/receta/memo'
// TypeScript infers types automatically
const double = memoize((n: number) => n * 2)
// ^? MemoizedFunction<[number], number>
const result = double(5)
// ^? numberGeneric Functions
function createGetter<T>(data: T[]) {
return memoize((id: string): T | undefined => {
return data.find((item: any) => item.id === id)
})
}
interface User {
id: string
name: string
}
const users: User[] = [{ id: '123', name: 'Alice' }]
const getUser = createGetter(users)
// ^? MemoizedFunction<[string], User | undefined>
const user = getUser('123')
// ^? User | undefinedAsync Type Inference
const fetchUser = memoizeAsync(async (id: string) => {
const res = await fetch(`/api/users/${id}`)
return res.json() as Promise<User>
})
// ^? MemoizedAsyncFunction<[string], User>
const user = await fetchUser('123')
// ^? UserCache Types
interface Cache<K, V> {
get(key: K): Option<V>
set(key: K, value: V): void
has(key: K): boolean
delete(key: K): boolean
clear(): void
}Next Steps
- Handle errors → Error Handling
- Best practices → Patterns