;
type Y = Promise<{ field: number }>;
type Z = Promise>;
type cases = [
Expect, string>>,
Expect, { field: number }>>,
Expect, string | number>>
];
// @ts-expect-error
type error = MyAwaited;
// ============= Your Code Here =============
type MyAwaited | Promise> = T extends Promise
? R extends Promise
? MyAwaited
: R
: never;">
;
type Y = Promise<{ field: number }>;
type Z = Promise>;
type cases = [
Expect, string>>,
Expect, { field: number }>>,
Expect, string | number>>
];
// @ts-expect-error
type error = MyAwaited;
// ============= Your Code Here =============
type MyAwaited | Promise> = T extends Promise
? R extends Promise
? MyAwaited
: R
: never;">
;
type Y = Promise<{ field: number }>;
type Z = Promise>;
type cases = [
Expect, string>>,
Expect, { field: number }>>,
Expect, string | number>>
];
// @ts-expect-error
type error = MyAwaited;
// ============= Your Code Here =============
type MyAwaited | Promise> = T extends Promise
? R extends Promise
? MyAwaited
: R
: never;">
// ============= Test Cases =============
import type { Equal, Expect } from "./test-utils";
type X = Promise<string>;
type Y = Promise<{ field: number }>;
type Z = Promise<Promise<string | number>>;
type cases = [
Expect<Equal<MyAwaited<X>, string>>,
Expect<Equal<MyAwaited<Y>, { field: number }>>,
Expect<Equal<MyAwaited<Z>, string | number>>
];
// @ts-expect-error
type error = MyAwaited<number>;
// ============= Your Code Here =============
type MyAwaited<T extends string | Record<string, any> | Promise<any>> = T extends Promise<infer R>
? R extends Promise<any>
? MyAwaited<R>
: R
: never;