const refreshSymbol = Symbol("refresh"); export type Refreshable = T & { /** * @internal */ [refreshSymbol]: () => void; }; export function refreshable(value: T, refresh: () => void) { return Object.assign(value, { [refreshSymbol]: refresh }) as Refreshable; } export function refresh(value: Refreshable) { value[refreshSymbol](); } export function canRefresh(value: unknown): value is Refreshable { return typeof value === "object" && value !== null && refreshSymbol in value; }