diff --git a/src/charm/src/index.d.ts b/src/charm/src/index.d.ts index 676662f..c7a6700 100644 --- a/src/charm/src/index.d.ts +++ b/src/charm/src/index.d.ts @@ -3,11 +3,6 @@ export as namespace Charm; type Cleanup = () => void; -type AnyMap = - | Map - | ReadonlyMap - | (K extends string | number | symbol ? { readonly [Key in K]: V } : never); - declare namespace Charm { /** * A primitive state container that can be read from or written to. When @@ -53,7 +48,6 @@ declare namespace Charm { /** * Creates a new atom with the given state. * - * @template State The type of the state. * @param state The initial state. * @param options Optional configuration. * @returns A new atom. @@ -151,8 +145,13 @@ declare namespace Charm { factory: (item: Item, index: number) => Cleanup | void, ): Cleanup; - function observe( - callback: Selector>, + function observe( + callback: Selector | ReadonlyMap>, + factory: (item: Item, key: Key) => Cleanup | void, + ): Cleanup; + + function observe( + callback: Selector<{ readonly [P in Key]: Item }>, factory: (item: Item, key: Key) => Cleanup | void, ): Cleanup; @@ -176,8 +175,13 @@ declare namespace Charm { mapper: (value: V0, index: number) => V1, ): Selector; - function mapped( - callback: Selector>, + function mapped( + callback: Selector | ReadonlyMap>, + mapper: (value: V0, key: K0) => LuaTuple<[value: V1 | undefined, key: K1]> | V1, + ): Selector>; + + function mapped( + callback: Selector<{ readonly [P in K0]: V0 }>, mapper: (value: V0, key: K0) => LuaTuple<[value: V1 | undefined, key: K1]> | V1, ): Selector>; }