Skip to content

Commit e7ffdfd

Browse files
committed
add test
1 parent 96bcac2 commit e7ffdfd

File tree

3 files changed

+203
-0
lines changed

3 files changed

+203
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//// [tests/cases/compiler/mappedTypeGenericIndexedAccess2.ts] ////
2+
3+
=== mappedTypeGenericIndexedAccess2.ts ===
4+
// https://github.com/microsoft/TypeScript/issues/60675
5+
6+
type EventPayloads = {
7+
>EventPayloads : Symbol(EventPayloads, Decl(mappedTypeGenericIndexedAccess2.ts, 0, 0))
8+
9+
completeSprint: {
10+
>completeSprint : Symbol(completeSprint, Decl(mappedTypeGenericIndexedAccess2.ts, 2, 22))
11+
12+
automationId: string;
13+
>automationId : Symbol(automationId, Decl(mappedTypeGenericIndexedAccess2.ts, 3, 19))
14+
15+
spaceId: string;
16+
>spaceId : Symbol(spaceId, Decl(mappedTypeGenericIndexedAccess2.ts, 4, 25))
17+
18+
};
19+
sendMessage: {
20+
>sendMessage : Symbol(sendMessage, Decl(mappedTypeGenericIndexedAccess2.ts, 6, 4))
21+
22+
message: string;
23+
>message : Symbol(message, Decl(mappedTypeGenericIndexedAccess2.ts, 7, 16))
24+
25+
};
26+
};
27+
28+
type CompletedEvent<T extends keyof EventPayloads> = {
29+
>CompletedEvent : Symbol(CompletedEvent, Decl(mappedTypeGenericIndexedAccess2.ts, 10, 2))
30+
>T : Symbol(T, Decl(mappedTypeGenericIndexedAccess2.ts, 12, 20))
31+
>EventPayloads : Symbol(EventPayloads, Decl(mappedTypeGenericIndexedAccess2.ts, 0, 0))
32+
33+
[E in T]: {
34+
>E : Symbol(E, Decl(mappedTypeGenericIndexedAccess2.ts, 13, 3))
35+
>T : Symbol(T, Decl(mappedTypeGenericIndexedAccess2.ts, 12, 20))
36+
37+
type: E;
38+
>type : Symbol(type, Decl(mappedTypeGenericIndexedAccess2.ts, 13, 13))
39+
>E : Symbol(E, Decl(mappedTypeGenericIndexedAccess2.ts, 13, 3))
40+
41+
payload: EventPayloads[E];
42+
>payload : Symbol(payload, Decl(mappedTypeGenericIndexedAccess2.ts, 14, 12))
43+
>EventPayloads : Symbol(EventPayloads, Decl(mappedTypeGenericIndexedAccess2.ts, 0, 0))
44+
>E : Symbol(E, Decl(mappedTypeGenericIndexedAccess2.ts, 13, 3))
45+
46+
appName: string;
47+
>appName : Symbol(appName, Decl(mappedTypeGenericIndexedAccess2.ts, 15, 30))
48+
49+
};
50+
}[T];
51+
>T : Symbol(T, Decl(mappedTypeGenericIndexedAccess2.ts, 12, 20))
52+
53+
function overwriteAppName<T extends keyof EventPayloads>(
54+
>overwriteAppName : Symbol(overwriteAppName, Decl(mappedTypeGenericIndexedAccess2.ts, 18, 5))
55+
>T : Symbol(T, Decl(mappedTypeGenericIndexedAccess2.ts, 20, 26))
56+
>EventPayloads : Symbol(EventPayloads, Decl(mappedTypeGenericIndexedAccess2.ts, 0, 0))
57+
58+
scheduled: CompletedEvent<T>,
59+
>scheduled : Symbol(scheduled, Decl(mappedTypeGenericIndexedAccess2.ts, 20, 57))
60+
>CompletedEvent : Symbol(CompletedEvent, Decl(mappedTypeGenericIndexedAccess2.ts, 10, 2))
61+
>T : Symbol(T, Decl(mappedTypeGenericIndexedAccess2.ts, 20, 26))
62+
63+
): CompletedEvent<T> {
64+
>CompletedEvent : Symbol(CompletedEvent, Decl(mappedTypeGenericIndexedAccess2.ts, 10, 2))
65+
>T : Symbol(T, Decl(mappedTypeGenericIndexedAccess2.ts, 20, 26))
66+
67+
const { appName, ...rest } = scheduled;
68+
>appName : Symbol(appName, Decl(mappedTypeGenericIndexedAccess2.ts, 23, 9))
69+
>rest : Symbol(rest, Decl(mappedTypeGenericIndexedAccess2.ts, 23, 18))
70+
>scheduled : Symbol(scheduled, Decl(mappedTypeGenericIndexedAccess2.ts, 20, 57))
71+
72+
// ok
73+
return {
74+
...rest,
75+
>rest : Symbol(rest, Decl(mappedTypeGenericIndexedAccess2.ts, 23, 18))
76+
77+
appName: "test",
78+
>appName : Symbol(appName, Decl(mappedTypeGenericIndexedAccess2.ts, 26, 12))
79+
80+
};
81+
}
82+
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
//// [tests/cases/compiler/mappedTypeGenericIndexedAccess2.ts] ////
2+
3+
=== mappedTypeGenericIndexedAccess2.ts ===
4+
// https://github.com/microsoft/TypeScript/issues/60675
5+
6+
type EventPayloads = {
7+
>EventPayloads : EventPayloads
8+
> : ^^^^^^^^^^^^^
9+
10+
completeSprint: {
11+
>completeSprint : { automationId: string; spaceId: string; }
12+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^
13+
14+
automationId: string;
15+
>automationId : string
16+
> : ^^^^^^
17+
18+
spaceId: string;
19+
>spaceId : string
20+
> : ^^^^^^
21+
22+
};
23+
sendMessage: {
24+
>sendMessage : { message: string; }
25+
> : ^^^^^^^^^^^ ^^^
26+
27+
message: string;
28+
>message : string
29+
> : ^^^^^^
30+
31+
};
32+
};
33+
34+
type CompletedEvent<T extends keyof EventPayloads> = {
35+
>CompletedEvent : CompletedEvent<T>
36+
> : ^^^^^^^^^^^^^^^^^
37+
38+
[E in T]: {
39+
type: E;
40+
>type : E
41+
> : ^
42+
43+
payload: EventPayloads[E];
44+
>payload : EventPayloads[E]
45+
> : ^^^^^^^^^^^^^^^^
46+
47+
appName: string;
48+
>appName : string
49+
> : ^^^^^^
50+
51+
};
52+
}[T];
53+
54+
function overwriteAppName<T extends keyof EventPayloads>(
55+
>overwriteAppName : <T extends keyof EventPayloads>(scheduled: CompletedEvent<T>) => CompletedEvent<T>
56+
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
57+
58+
scheduled: CompletedEvent<T>,
59+
>scheduled : CompletedEvent<T>
60+
> : ^^^^^^^^^^^^^^^^^
61+
62+
): CompletedEvent<T> {
63+
const { appName, ...rest } = scheduled;
64+
>appName : string
65+
> : ^^^^^^
66+
>rest : Omit<CompletedEvent<T>, "appName">
67+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68+
>scheduled : CompletedEvent<T>
69+
> : ^^^^^^^^^^^^^^^^^
70+
71+
// ok
72+
return {
73+
>{ ...rest, appName: "test", } : Omit<CompletedEvent<T>, "appName"> & { appName: string; }
74+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75+
76+
...rest,
77+
>rest : Omit<CompletedEvent<T>, "appName">
78+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
79+
80+
appName: "test",
81+
>appName : string
82+
> : ^^^^^^
83+
>"test" : "test"
84+
> : ^^^^^^
85+
86+
};
87+
}
88+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
// https://github.com/microsoft/TypeScript/issues/60675
5+
6+
type EventPayloads = {
7+
completeSprint: {
8+
automationId: string;
9+
spaceId: string;
10+
};
11+
sendMessage: {
12+
message: string;
13+
};
14+
};
15+
16+
type CompletedEvent<T extends keyof EventPayloads> = {
17+
[E in T]: {
18+
type: E;
19+
payload: EventPayloads[E];
20+
appName: string;
21+
};
22+
}[T];
23+
24+
function overwriteAppName<T extends keyof EventPayloads>(
25+
scheduled: CompletedEvent<T>,
26+
): CompletedEvent<T> {
27+
const { appName, ...rest } = scheduled;
28+
// ok
29+
return {
30+
...rest,
31+
appName: "test",
32+
};
33+
}

0 commit comments

Comments
 (0)