-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmapped.ts
More file actions
46 lines (37 loc) · 893 Bytes
/
mapped.ts
File metadata and controls
46 lines (37 loc) · 893 Bytes
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
type MyFlexibleDogInfo = {
name: string;
[key: string]: string | number;
};
const dog_map: MyFlexibleDogInfo = {
name: "LG",
breed: "Mutton",
age: 22,
};
interface DogInfo {
name: string;
age: number;
}
type OptionsFlags<Type> = {
[Property in keyof Type]: null;
};
type DogInfoOptions = OptionsFlags<DogInfo>;
type Listeners<Type> = {
[Property in keyof Type as `on${Capitalize<string & Property>}Change`]?: (
newValue: Type[Property]
) => void;
} & {
[Property in keyof Type as `on${Capitalize<string & Property>}Delete`]?: () => void;
};
function listenToObject<T>(obj: T, listeners: Listeners<T>): void {
throw "Need to be implemented";
}
const lg: DogInfo = {
name: "LG",
age: 13,
};
type DogInfoListeners = Listeners<DogInfo>;
listenToObject(lg, {
onNameChange: (v: string) => {},
onAgeChange: (v: number) => {},
onAgeDelete: () => {},
});