import {ref, Ref, unref, UnwrapRef} from 'vue'; import {SetStateAction} from './misc/types'; import {resolveHookState, IHookStateInitAction} from './misc/hookState'; export type ToRef = [T] extends [Ref] ? T : Ref export default function useState(value: T): [ToRef, (prevState: SetStateAction) => void] export default function useState(value: IHookStateInitAction): [Ref, (prevState: SetStateAction) => void] export default function useState(value: T): [ToRef, (prevState: SetStateAction) => void] export default function useState(): [Ref, (prevState: SetStateAction) => void] export default function useState(initialState?: unknown) { const state = ref(resolveHookState(initialState)); const set = (value) => { if (value instanceof Function) { state.value = value(state.value); } else { state.value = unref(value); } }; return [state, set]; };