Skip to content

Commit 82b8a4f

Browse files
committed
Add new test
1 parent bbb1164 commit 82b8a4f

4 files changed

+179
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//// [genericIndexedAccessMethodIntersectionCanBeAccessed.ts]
2+
type ExtendedService<T> = {
3+
[K in keyof T]: T[K] & {
4+
__$daemonMode?: string;
5+
__$action?: string;
6+
};
7+
};
8+
9+
type Service<T> = {
10+
[K in keyof T]: T[K] & {id?: string};
11+
};
12+
13+
export const createService = <T>(
14+
ServiceCtr: ExtendedService<T> & Service<T>
15+
) => {
16+
Object.keys(ServiceCtr).forEach(key => {
17+
const method = (ServiceCtr)[key as keyof T];
18+
const {__$daemonMode, __$action, id} = method;
19+
})
20+
}
21+
22+
23+
//// [genericIndexedAccessMethodIntersectionCanBeAccessed.js]
24+
"use strict";
25+
exports.__esModule = true;
26+
exports.createService = function (ServiceCtr) {
27+
Object.keys(ServiceCtr).forEach(function (key) {
28+
var method = (ServiceCtr)[key];
29+
var __$daemonMode = method.__$daemonMode, __$action = method.__$action, id = method.id;
30+
});
31+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
=== tests/cases/compiler/genericIndexedAccessMethodIntersectionCanBeAccessed.ts ===
2+
type ExtendedService<T> = {
3+
>ExtendedService : Symbol(ExtendedService, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 0, 0))
4+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 0, 21))
5+
6+
[K in keyof T]: T[K] & {
7+
>K : Symbol(K, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 1, 5))
8+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 0, 21))
9+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 0, 21))
10+
>K : Symbol(K, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 1, 5))
11+
12+
__$daemonMode?: string;
13+
>__$daemonMode : Symbol(__$daemonMode, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 1, 28))
14+
15+
__$action?: string;
16+
>__$action : Symbol(__$action, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 2, 31))
17+
18+
};
19+
};
20+
21+
type Service<T> = {
22+
>Service : Symbol(Service, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 5, 2))
23+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 7, 13))
24+
25+
[K in keyof T]: T[K] & {id?: string};
26+
>K : Symbol(K, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 8, 5))
27+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 7, 13))
28+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 7, 13))
29+
>K : Symbol(K, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 8, 5))
30+
>id : Symbol(id, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 8, 28))
31+
32+
};
33+
34+
export const createService = <T>(
35+
>createService : Symbol(createService, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 12))
36+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 30))
37+
38+
ServiceCtr: ExtendedService<T> & Service<T>
39+
>ServiceCtr : Symbol(ServiceCtr, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 33))
40+
>ExtendedService : Symbol(ExtendedService, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 0, 0))
41+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 30))
42+
>Service : Symbol(Service, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 5, 2))
43+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 30))
44+
45+
) => {
46+
Object.keys(ServiceCtr).forEach(key => {
47+
>Object.keys(ServiceCtr).forEach : Symbol(Array.forEach, Decl(lib.es5.d.ts, --, --))
48+
>Object.keys : Symbol(ObjectConstructor.keys, Decl(lib.es5.d.ts, --, --))
49+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
50+
>keys : Symbol(ObjectConstructor.keys, Decl(lib.es5.d.ts, --, --))
51+
>ServiceCtr : Symbol(ServiceCtr, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 33))
52+
>forEach : Symbol(Array.forEach, Decl(lib.es5.d.ts, --, --))
53+
>key : Symbol(key, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 14, 36))
54+
55+
const method = (ServiceCtr)[key as keyof T];
56+
>method : Symbol(method, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 15, 13))
57+
>ServiceCtr : Symbol(ServiceCtr, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 33))
58+
>key : Symbol(key, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 14, 36))
59+
>T : Symbol(T, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 11, 30))
60+
61+
const {__$daemonMode, __$action, id} = method;
62+
>__$daemonMode : Symbol(__$daemonMode, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 16, 15))
63+
>__$action : Symbol(__$action, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 16, 29))
64+
>id : Symbol(id, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 16, 40))
65+
>method : Symbol(method, Decl(genericIndexedAccessMethodIntersectionCanBeAccessed.ts, 15, 13))
66+
67+
})
68+
}
69+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
=== tests/cases/compiler/genericIndexedAccessMethodIntersectionCanBeAccessed.ts ===
2+
type ExtendedService<T> = {
3+
>ExtendedService : ExtendedService<T>
4+
5+
[K in keyof T]: T[K] & {
6+
__$daemonMode?: string;
7+
>__$daemonMode : string | undefined
8+
9+
__$action?: string;
10+
>__$action : string | undefined
11+
12+
};
13+
};
14+
15+
type Service<T> = {
16+
>Service : Service<T>
17+
18+
[K in keyof T]: T[K] & {id?: string};
19+
>id : string | undefined
20+
21+
};
22+
23+
export const createService = <T>(
24+
>createService : <T>(ServiceCtr: ExtendedService<T> & Service<T>) => void
25+
><T>( ServiceCtr: ExtendedService<T> & Service<T>) => { Object.keys(ServiceCtr).forEach(key => { const method = (ServiceCtr)[key as keyof T]; const {__$daemonMode, __$action, id} = method; })} : <T>(ServiceCtr: ExtendedService<T> & Service<T>) => void
26+
27+
ServiceCtr: ExtendedService<T> & Service<T>
28+
>ServiceCtr : ExtendedService<T> & Service<T>
29+
30+
) => {
31+
Object.keys(ServiceCtr).forEach(key => {
32+
>Object.keys(ServiceCtr).forEach(key => { const method = (ServiceCtr)[key as keyof T]; const {__$daemonMode, __$action, id} = method; }) : void
33+
>Object.keys(ServiceCtr).forEach : (callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any) => void
34+
>Object.keys(ServiceCtr) : string[]
35+
>Object.keys : (o: {}) => string[]
36+
>Object : ObjectConstructor
37+
>keys : (o: {}) => string[]
38+
>ServiceCtr : ExtendedService<T> & Service<T>
39+
>forEach : (callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any) => void
40+
>key => { const method = (ServiceCtr)[key as keyof T]; const {__$daemonMode, __$action, id} = method; } : (key: string) => void
41+
>key : string
42+
43+
const method = (ServiceCtr)[key as keyof T];
44+
>method : (ExtendedService<T> & Service<T>)[keyof T]
45+
>(ServiceCtr)[key as keyof T] : (ExtendedService<T> & Service<T>)[keyof T]
46+
>(ServiceCtr) : ExtendedService<T> & Service<T>
47+
>ServiceCtr : ExtendedService<T> & Service<T>
48+
>key as keyof T : keyof T
49+
>key : string
50+
51+
const {__$daemonMode, __$action, id} = method;
52+
>__$daemonMode : string | undefined
53+
>__$action : string | undefined
54+
>id : string | undefined
55+
>method : (ExtendedService<T> & Service<T>)[keyof T]
56+
57+
})
58+
}
59+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// @strict: true
2+
type ExtendedService<T> = {
3+
[K in keyof T]: T[K] & {
4+
__$daemonMode?: string;
5+
__$action?: string;
6+
};
7+
};
8+
9+
type Service<T> = {
10+
[K in keyof T]: T[K] & {id?: string};
11+
};
12+
13+
export const createService = <T>(
14+
ServiceCtr: ExtendedService<T> & Service<T>
15+
) => {
16+
Object.keys(ServiceCtr).forEach(key => {
17+
const method = (ServiceCtr)[key as keyof T];
18+
const {__$daemonMode, __$action, id} = method;
19+
})
20+
}

0 commit comments

Comments
 (0)