UNPKG

1.7 kBTypeScriptView Raw
1type Getter = <Value>(atom: Atom<Value>) => Value;
2type Setter = <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
3type SetAtom<Args extends unknown[], Result> = <A extends Args>(...args: A) => Result;
4type Read<Value, SetSelf = never> = (get: Getter, options: {
5 readonly signal: AbortSignal;
6 readonly setSelf: SetSelf;
7}) => Value;
8type Write<Args extends unknown[], Result> = (get: Getter, set: Setter, ...args: Args) => Result;
9type WithInitialValue<Value> = {
10 init: Value;
11};
12type OnUnmount = () => void;
13type OnMount<Args extends unknown[], Result> = <S extends SetAtom<Args, Result>>(setAtom: S) => OnUnmount | void;
14export interface Atom<Value> {
15 toString: () => string;
16 debugLabel?: string;
17 read: Read<Value>;
18}
19export interface WritableAtom<Value, Args extends unknown[], Result> extends Atom<Value> {
20 read: Read<Value, SetAtom<Args, Result>>;
21 write: Write<Args, Result>;
22 onMount?: OnMount<Args, Result>;
23}
24type SetStateAction<Value> = Value | ((prev: Value) => Value);
25export type PrimitiveAtom<Value> = WritableAtom<Value, [
26 SetStateAction<Value>
27], void>;
28export declare function atom<Value, Args extends unknown[], Result>(read: Read<Value, SetAtom<Args, Result>>, write: Write<Args, Result>): WritableAtom<Value, Args, Result>;
29export declare function atom<Value>(read: Read<Value>): Atom<Value>;
30export declare function atom<Value, Args extends unknown[], Result>(initialValue: Value, write: Write<Args, Result>): WritableAtom<Value, Args, Result> & WithInitialValue<Value>;
31export declare function atom<Value>(initialValue: Value): PrimitiveAtom<Value> & WithInitialValue<Value>;
32export {};
33
\No newline at end of file