123456789101112131415161718192021222324252627 |
- /**
- Returns the type that is wrapped inside a `Promise` type.
- If the type is a nested Promise, it is unwrapped recursively until a non-Promise type is obtained.
- If the type is not a `Promise`, the type itself is returned.
-
- @example
- ```
- import {PromiseValue} from 'type-fest';
-
- type AsyncData = Promise<string>;
- let asyncData: PromiseValue<AsyncData> = Promise.resolve('ABC');
-
- type Data = PromiseValue<AsyncData>;
- let data: Data = await asyncData;
-
- // Here's an example that shows how this type reacts to non-Promise types.
- type SyncData = PromiseValue<string>;
- let syncData: SyncData = getSyncData();
-
- // Here's an example that shows how this type reacts to recursive Promise types.
- type RecursiveAsyncData = Promise<Promise<string> >;
- let recursiveAsyncData: PromiseValue<RecursiveAsyncData> = Promise.resolve(Promise.resolve('ABC'));
- ```
- */
- export type PromiseValue<PromiseType, Otherwise = PromiseType> = PromiseType extends Promise<infer Value>
- ? { 0: PromiseValue<Value>; 1: Value }[PromiseType extends Promise<unknown> ? 0 : 1]
- : Otherwise;
|