If you destructure methods from get/ctx, you will unbind this unknowingly because @typescript-eslint/unbound-method only sees the interface and not the underlying class. The interfaces therefore need to use method-style and not function-style.
From
export interface Context {
<A>(atom: Atom<A>): A
readonly get: <A>(atom: Atom<A>) => A
// ...
}
To
export interface Context {
<A>(atom: Atom<A>): A
get<A>(atom: Atom<A>): A
// ...
}