receta
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)
//    ^? number

Generic 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 | undefined

Async 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')
//    ^? User

Cache 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

On this page