-
Notifications
You must be signed in to change notification settings - Fork 0
/
map.ts
54 lines (44 loc) · 1.02 KB
/
map.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
// type MyFlexibleDogInfo = {
// name: string;
// } & Record<string, string>;
// const dog: MyFlexibleDogInfo = {
// name: 'piggle',
// breed: 'Mutt',
// };
type MyFlexibleDogInfo = {
name: string;
[key: string]: string | number;
};
const dog: MyFlexibleDogInfo = {
name: 'piggle',
breed: 'Mutt',
age: 12,
};
interface DogInfo {
name: string;
age: number;
}
type OptionsFlags<Type> = {
[Property in keyof Type]: boolean;
// [Property in keyof Type]: null;
};
type DogInfoOptions = OptionsFlags<DogInfo>;
type Listener<Type> = {
[Property in keyof Type as `on${Capitalize<string & Property>}Change`]?: (
newValue: Type[Property]
) => void;
};
//Pratical example for this
function listenToObject<T>(obj: T, listener: Listener<T>): void {
console.log('need to implement first');
throw 'Need to be implemented';
}
const lg: DogInfo = {
name: 'LG',
age: 8,
};
type DogInfoListener = Listener<DogInfo>;
listenToObject(lg, {
onNameChange: (v: string) => {},
onAgeChange: (v: number) => {},
});