-
-
Notifications
You must be signed in to change notification settings - Fork 506
/
get.ts
50 lines (41 loc) · 1.25 KB
/
get.ts
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
import {Get} from '../ts41/get';
import {expectType} from 'tsd';
interface ApiResponse {
hits: {
hits: Array<{
_id: string;
_source: {
name: Array<{
given: string[];
family: string;
}>;
birthDate: string;
};
}>;
};
}
expectType<Get<ApiResponse, 'hits.hits[0]._source.name'>>([{given: ['Homer', 'J'], family: 'Simpson'}]);
expectType<Get<ApiResponse, 'hits.hits.0._source.name'>>([{given: ['Homer', 'J'], family: 'Simpson'}]);
expectType<Get<ApiResponse, 'hits.hits[12345]._source.name'>>([{given: ['Homer', 'J'], family: 'Simpson'}]);
expectType<Get<ApiResponse, 'hits.someNonsense.notTheRightPath'>>({} as never);
interface WithTuples {
foo: [
{bar: number},
{baz: boolean}
];
}
expectType<Get<WithTuples, 'foo[0].bar'>>(123);
expectType<Get<WithTuples, 'foo.0.bar'>>(123);
expectType<Get<WithTuples, 'foo[1].bar'>>({} as never);
expectType<Get<WithTuples, 'foo.1.bar'>>({} as never);
interface WithNumberKeys {
foo: {
1: {
bar: number;
};
};
}
expectType<Get<WithNumberKeys, 'foo[1].bar'>>(123);
expectType<Get<WithNumberKeys, 'foo.1.bar'>>(123);
expectType<Get<WithNumberKeys, 'foo[2].bar'>>({} as never);
expectType<Get<WithNumberKeys, 'foo.2.bar'>>({} as never);