Optimistic Lock Version Check
Implement optimistic locking with a version column, returning a typed conflict result when concurrent writers collide.
Code
export interface Record { id: string; value: string; version: number; }
export type UpdateResult = { ok: true; record: Record } | { ok: false; conflict: true; current: Record };
export async function updateWithVersion(
store: { load(id: string): Promise<Record | undefined>; save(record: Record, expectedVersion: number): Promise<boolean> },
id: string,
mutate: (value: string) => string,
): Promise<UpdateResult> {
const current = await store.load(id);
if (!current) throw new Error('record not found: ' + id);
const next: Record = { id, value: mutate(current.value), version: current.version + 1 };
const saved = await store.save(next, current.version);
if (!saved) {
const fresh = await store.load(id);
if (!fresh) throw new Error('record vanished during update: ' + id);
return { ok: false, conflict: true, current: fresh };
}
return { ok: true, record: next };
}Report a problem with this exampleOpens a pre-filled issue on GitHub.