import {UnwrapRef, computed, ComputedRef} from 'vue'; import {useState} from './index'; export interface QueueMethods { add: (item: T) => void; remove: () => T | undefined; first: ComputedRef>; last: ComputedRef>; size: ComputedRef>; } // 队列 const useQueue = (initialValue: T[] = []): QueueMethods => { const [state, set] = useState(initialValue); return { add: (value) => { set((queue) => [...queue, value]); }, remove: () => { let result: T | undefined = undefined; set(([first, ...rest]) => { result = first; return rest; }); return result; }, first: computed(() => { return state.value[0] as UnwrapRef; }), last: computed(() => { return state.value[state.value.length - 1] as UnwrapRef; }), size: computed(() => { return state.value.length; }), }; }; export default useQueue;