forked from sindresorhus/type-fest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get.ts
49 lines (40 loc) · 1.27 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
import {Get} from '../ts41/get';
import {expectTypeOf} from 'expect-type';
interface ApiResponse {
hits: {
hits: Array<{
_id: string;
_source: {
name: Array<{
given: string[];
family: string;
}>;
birthDate: string;
};
}>;
};
}
expectTypeOf<Get<ApiResponse, 'hits.hits[0]._source.name'>>().toEqualTypeOf<Array<{given: string[]; family: string}>>();
expectTypeOf<Get<ApiResponse, 'hits.hits.0._source.name'>>().toEqualTypeOf<Array<{given: string[]; family: string}>>();
expectTypeOf<Get<ApiResponse, 'hits.someNonsense.notTheRightPath'>>().toBeUndefined();
interface WithTuples {
foo: [
{bar: number},
{baz: boolean}
];
}
expectTypeOf<Get<WithTuples, 'foo[0].bar'>>().toBeNumber();
expectTypeOf<Get<WithTuples, 'foo.0.bar'>>().toBeNumber();
expectTypeOf<Get<WithTuples, 'foo[1].bar'>>().toBeUndefined();
expectTypeOf<Get<WithTuples, 'foo.1.bar'>>().toBeUndefined();
interface WithNumberKeys {
foo: {
1: {
bar: number;
};
};
}
expectTypeOf<Get<WithNumberKeys, 'foo[1].bar'>>().toBeNumber();
expectTypeOf<Get<WithNumberKeys, 'foo.1.bar'>>().toBeNumber();
expectTypeOf<Get<WithNumberKeys, 'foo[2].bar'>>().toBeUndefined();
expectTypeOf<Get<WithNumberKeys, 'foo.2.bar'>>().toBeUndefined();