File: identityAndDivergentNormalizedTypes.types

package info (click to toggle)
node-typescript 5.1.6%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 492,516 kB
  • sloc: javascript: 2,078,951; makefile: 6; sh: 1
file content (76 lines) | stat: -rw-r--r-- 2,755 bytes parent folder | download
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>; }
}