/**
 * 与useEffect类似，可以接受一个Generator函数callback，
 * callback函数中可以 yield Promise，与async函数中的await Promise功能相同
 *
 * 当deps发生变化或Component被卸载的时候，
 * 这个Generator函数的执行会中断在当前的yield位置。
 * 中断时既不执行下一个语句，也不抛出异常，
 * 但finally块在中断后仍会被执行。
 *
 * callback函数的finally块中可以使用isCancelled检查
 * 当前执行过程是否被取消
 * @param callback
 * @param deps
 */
export function useCoEffect(callback: (isCancelled: () => boolean) => Generator<Promise<any>, (() => void) | void, any>, deps: any[]): void

export type ITailParameters<T extends (...args: any) => any> = T extends (a: any, ...b: infer I) => void ? I : []

/**
 * 与useCallback类似，可以接受一个Generator函数callback，
 * callback函数中可以 yield Promise，与async函数中的await Promise功能相同
 *
 * 当deps发生变化或Component被卸载的时候，
 * 这个Generator函数的执行会中断在当前的yield位置。
 * 中断时既不执行下一个语句，也不抛出异常，
 * 但finally块在中断后仍会被执行。
 *
 * callback函数的finally块中可以使用isCancelled检查
 * 当前执行过程是否被取消
 * @param callback
 * @param deps
 */
export function useCoCallback<T extends (isCancelled: () => boolean, ...args: any) => Generator<Promise<any>, (() => void) | void, any>>(callback: T, deps: any[]): (...args: ITailParameters<T>) => void


