state: UnwrapRef<S>
) => void
+// to support TS 4.4
+// TODO: remove in 2.1.0, use Awaited, and up the peer dep to TS 4.5
+type _Awaited<T> = T extends null | undefined
+ ? T // special case for `null | undefined` when not in `--strictNullChecks` mode
+ : T extends object & { then(onfulfilled: infer F): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped
+ ? F extends (value: infer V, ...args: any) => any // if the argument to `then` is callable, extracts the first argument
+ ? Awaited<V> // recursively unwrap the value
+ : never // the argument to `then` was not callable
+ : T // non-object or non-thenable
+
/**
* Actual type for {@link StoreOnActionListenerContext}. Exists for refactoring
* purposes. For internal use only.
after: (
callback: A extends Record<ActionName, _Method>
? (
- resolvedReturn: Awaited<ReturnType<A[ActionName]>>
+ resolvedReturn: _Awaited<ReturnType<A[ActionName]>>
// allow the after callback to override the return value
) =>
| void
| ReturnType<A[ActionName]>
- | Awaited<ReturnType<A[ActionName]>>
+ | _Awaited<ReturnType<A[ActionName]>>
: () => void
) => void