1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
=== tests/cases/compiler/identityAndDivergentNormalizedTypes.ts ===
// Repros from #53998
type ApiPost =
>ApiPost : { path: "/login"; body: {}; } | { path: "/user"; body: { name: string;}; }
| {
path: "/login";
>path : "/login"
body: {};
>body : {}
}
| {
path: "/user";
>path : "/user"
body: { name: string; };
>body : { name: string; }
>name : string
}
type PostPath = ApiPost["path"];
>PostPath : "/login" | "/user"
type PostBody<PATH extends PostPath> = Extract<ApiPost, { path: PATH }>["body"];
>PostBody : PostBody<PATH>
>path : PATH
const post = <PATH extends PostPath>(
>post : <PATH extends "/login" | "/user">(path: PATH, { body, ...options }: Omit<RequestInit, "body"> & { body: PostBody<PATH>; }) => void
><PATH extends PostPath>( path: PATH, {body, ...options}: Omit<RequestInit, 'body'> & {body: PostBody<PATH>}) => {} : <PATH extends "/login" | "/user">(path: PATH, { body, ...options }: Omit<RequestInit, "body"> & { body: PostBody<PATH>; }) => void
path: PATH,
>path : PATH
{body, ...options}: Omit<RequestInit, 'body'> & {body: PostBody<PATH>}
>body : PostBody<PATH>
>options : { cache?: RequestCache | undefined; credentials?: RequestCredentials | undefined; headers?: HeadersInit | undefined; integrity?: string | undefined; keepalive?: boolean | undefined; method?: string | undefined; mode?: RequestMode | undefined; redirect?: RequestRedirect | undefined; referrer?: string | undefined; referrerPolicy?: ReferrerPolicy | undefined; signal?: AbortSignal | null | undefined; window?: null | undefined; }
>body : PostBody<PATH>
) => {
}
const tmp = <PATH extends PostPath>(
>tmp : <PATH extends "/login" | "/user">(path: PATH, body: PostBody<PATH>) => void
><PATH extends PostPath>( path: PATH, body: PostBody<PATH>) => { post<PATH>(path, { body })} : <PATH extends "/login" | "/user">(path: PATH, body: PostBody<PATH>) => void
path: PATH,
>path : PATH
body: PostBody<PATH>
>body : PostBody<PATH>
) => {
post<PATH>(path, { body })
>post<PATH>(path, { body }) : void
>post : <PATH extends "/login" | "/user">(path: PATH, { body, ...options }: Omit<RequestInit, "body"> & { body: PostBody<PATH>; }) => void
>path : PATH
>{ body } : { body: PostBody<PATH>; }
>body : PostBody<PATH>
}
function fx1<P extends PostPath>(x: { body: PostBody<P> }, y: { body: PostBody<P> }) {
>fx1 : <P extends "/login" | "/user">(x: { body: PostBody<P>;}, y: { body: PostBody<P>;}) => void
>x : { body: PostBody<P>; }
>body : PostBody<P>
>y : { body: PostBody<P>; }
>body : PostBody<P>
x = y;
>x = y : { body: PostBody<P>; }
>x : { body: PostBody<P>; }
>y : { body: PostBody<P>; }
}
|