type MemoItem = Memo | T; type MemoArray = ReadonlyArray>; type MemoType> = T extends MemoItem ? U : never; type ExtractValueType>> = { [index in keyof T]: T[index] extends T[number] ? MemoType : never; }; type ProjectorParameters = ExtractValueType; declare abstract class Memo { abstract value(): Type; } export declare class MemoComputed extends Memo { #private; constructor(..._: readonly [...Values, (...args: ProjectorParameters) => Type]); value(): Type; } export declare class MemoPrimitive extends Memo { #private; constructor(value: Type); update(value: Type): void; value(): Type; } export {};