UNPKG

2.43 kBTypeScriptView Raw
1type Getter = {
2 <Value>(atom: Atom<Value | Promise<Value>>): Value;
3 <Value>(atom: Atom<Promise<Value>>): Value;
4 <Value>(atom: Atom<Value>): Awaited<Value>;
5};
6type WriteGetter = Getter & {
7 <Value>(atom: Atom<Value | Promise<Value>>, options: {
8 unstable_promise: true;
9 }): Promise<Value> | Value;
10 <Value>(atom: Atom<Promise<Value>>, options: {
11 unstable_promise: true;
12 }): Promise<Value> | Value;
13 <Value>(atom: Atom<Value>, options: {
14 unstable_promise: true;
15 }): Promise<Awaited<Value>> | Awaited<Value>;
16};
17type Setter = {
18 <Value, Result extends void | Promise<void>>(atom: WritableAtom<Value, undefined, Result>): Result;
19 <Value, Update, Result extends void | Promise<void>>(atom: WritableAtom<Value, Update, Result>, update: Update): Result;
20};
21type Read<Value> = (get: Getter) => Value;
22type Write<Update, Result extends void | Promise<void>> = (get: WriteGetter, set: Setter, update: Update) => Result;
23type WithInitialValue<Value> = {
24 init: Value;
25};
26export type SetAtom<Update, Result extends void | Promise<void>> = undefined extends Update ? (update?: Update) => Result : (update: Update) => Result;
27type OnUnmount = () => void;
28type OnMount<Update, Result extends void | Promise<void>> = <S extends SetAtom<Update, Result>>(setAtom: S) => OnUnmount | void;
29export interface Atom<Value> {
30 toString: () => string;
31 debugLabel?: string;
32 read: Read<Value>;
33}
34export interface WritableAtom<Value, Update, Result extends void | Promise<void> = void> extends Atom<Value> {
35 write: Write<Update, Result>;
36 onMount?: OnMount<Update, Result>;
37}
38type SetStateAction<Value> = Value | ((prev: Value) => Value);
39export type PrimitiveAtom<Value> = WritableAtom<Value, SetStateAction<Value>>;
40export declare function atom<Value, Update, Result extends void | Promise<void> = void>(read: Read<Value>, write: Write<Update, Result>): WritableAtom<Value, Update, Result>;
41export declare function atom<Value>(read: Read<Value>): Atom<Value>;
42export declare function atom(invalidFunction: (...args: any) => any, write?: any): never;
43export declare function atom<Value, Update, Result extends void | Promise<void> = void>(initialValue: Value, write: Write<Update, Result>): WritableAtom<Value, Update, Result> & WithInitialValue<Value>;
44export declare function atom<Value>(initialValue: Value): PrimitiveAtom<Value> & WithInitialValue<Value>;
45export {};
46
\No newline at end of file