👻
Re: jotaiのuseAtom()で更新関数の型がnever
これ、以前から時折質問されていて、型推論に任せるか、
const [loading, setLoading] = useAtom(loadingState);
3引数とも書くか、
const [loading, setLoading] = useAtom<boolean, [SetStateAction<boolean>], void>(loadingState);
してくださいと回答していたのですが、確かに分かりにくいですね。
もしかしたら、もう一つオーバーロードすればできるかもと、ちょっと試してみました。
import { atom, useAtom as useAtomOrig, useAtomValue } from "jotai";
import type { Atom, PrimitiveAtom, SetStateAction, WritableAtom } from "jotai";
const countAtom = atom(0);
const [countOrig, setCountOrig] = useAtomOrig<number>(countAtom);
// ^? const setCountOrig: never
type SetAtom<Args extends unknown[], Result> = (...args: Args) => Result;
type Options = Parameters<typeof useAtomValue>[1];
declare function useAtom<Value, Args extends unknown[], Result>(
atom: WritableAtom<Value, Args, Result>,
options?: Options,
): [Awaited<Value>, SetAtom<Args, Result>];
declare function useAtom<Value>(
atom: PrimitiveAtom<Value>,
options?: Options,
): [Awaited<Value>, SetAtom<[SetStateAction<Value>], void>];
declare function useAtom<Value>(
atom: Atom<Value>,
options?: Options,
): [Awaited<Value>, never];
const [count, setCount] = useAtom<number>(countAtom);
// ^? const setCount: SetAtom<[SetStateAction<number>], void>
できました。プルリクエスト作ろうっと。
Jotai Friends のテックブログです。 React状態管理ライブラリJotai(jotai.org)を新たな選択肢に。 エンジニアの皆さんが安心してJotaiを採用できるように支援します。 Powered by twitter.com/t6adev
Discussion