-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
array.ts
executable file
·73 lines (61 loc) · 2.48 KB
/
array.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import EmberObject from '@ember/object';
import type Array from '@ember/array';
import { A } from '@ember/array';
import type MutableArray from '@ember/array/mutable';
import { expectTypeOf } from 'expect-type';
class Person extends EmberObject {
name = '';
isHappy = false;
}
const people = A([
Person.create({ name: 'Yehuda', isHappy: true }),
Person.create({ name: 'Majd', isHappy: false }),
]);
expectTypeOf(people.get('length')).toBeNumber();
expectTypeOf(people.get('lastObject')).toEqualTypeOf<Person | undefined>();
expectTypeOf(people.get('firstObject')).toEqualTypeOf<Person | undefined>();
expectTypeOf(people.isAny('isHappy')).toBeBoolean();
expectTypeOf(people.isAny('isHappy', false)).toBeBoolean();
// @ts-expect-error -- string != boolean
people.isAny('isHappy', 'false');
expectTypeOf(people.objectAt(0)).toEqualTypeOf<Person | undefined>();
expectTypeOf(people.objectsAt([1, 2, 3])).toEqualTypeOf<Array<Person | undefined>>();
expectTypeOf(people.filterBy('isHappy')).toMatchTypeOf<Person[]>();
expectTypeOf(people.filterBy('isHappy')).toMatchTypeOf<MutableArray<Person>>();
expectTypeOf(people.rejectBy('isHappy')).toMatchTypeOf<Person[]>();
expectTypeOf(people.rejectBy('isHappy')).toMatchTypeOf<MutableArray<Person>>();
expectTypeOf(people.filter((person) => person.get('name') === 'Yehuda')).toMatchTypeOf<Person[]>();
expectTypeOf(people.filter((person) => person.get('name') === 'Yehuda')).toMatchTypeOf<
MutableArray<Person>
>();
expectTypeOf(people.get('[]')).toEqualTypeOf<typeof people>();
expectTypeOf(people.get('[]').get('firstObject')).toEqualTypeOf<Person | undefined>();
expectTypeOf(people.mapBy('isHappy')).toMatchTypeOf<boolean[]>();
expectTypeOf(people.mapBy('name.length')).toMatchTypeOf<unknown[]>();
const last = people.get('lastObject');
expectTypeOf(last).toEqualTypeOf<Person | undefined>();
if (last) {
expectTypeOf(last.get('name')).toBeString();
}
const first = people.get('lastObject');
if (first) {
expectTypeOf(first.get('isHappy')).toBeBoolean();
}
const letters = A(['a', 'b', 'c']);
const codes = letters.map((item, index, array) => {
expectTypeOf(item).toBeString();
expectTypeOf(index).toBeNumber();
expectTypeOf(array).toMatchTypeOf<string[]>();
return item.charCodeAt(0);
});
expectTypeOf(codes).toMatchTypeOf<number[]>();
const value = '1,2,3';
const filters = A(value.split(','));
filters.push('4');
filters.sort();
const multiSortArr = A([
{ k: 'a', v: 'z' },
{ k: 'a', v: 'y' },
{ k: 'b', v: 'c' },
]);
multiSortArr.sortBy('k', 'v');