-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgeneric.ts
More file actions
66 lines (53 loc) · 1.51 KB
/
generic.ts
File metadata and controls
66 lines (53 loc) · 1.51 KB
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
// const names: Array<string> = [];
// names[0].split("");
//
// const promise = new Promise<string>((resolve, reject) => {
// setTimeout(() => resolve("This is done"), 2000);
// });
//
// promise.then(data => {
// data.split(' ')
// })
function merge<T extends object, U extends object>(objA: T, objB: U) {
return Object.assign(objA, objB);
}
const mergedObject1 = merge({ name: "Max", hobbies: ["Sports"] }, { age: 30 });
const mergedObject2 = merge({ name: "Max" }, { age: 30 });
console.log(mergedObject1.age);
interface Lengthy {
length: number;
}
function countAndPrint<T extends Lengthy>(element: T): [T, string] {
let descriptionText = "Got no value";
if (element.length === 0) {
descriptionText = "Got 1 element.";
} else if (element.length > 1) {
descriptionText = "Got " + element.length + " elements.";
}
return [element, descriptionText];
}
console.log(countAndPrint("Hi there!"));
function extractAndConvert<T extends object, U extends keyof T>(
obj: T,
key: U
) {
return "Value: " + obj[key];
}
console.log(extractAndConvert({ name: "kek" }, "name"));
class DataStorage<T extends string | number | boolean> {
private data: T[] = [];
addItem(item: T) {
this.data.push(item);
}
removeItem(item: T) {
this.data.splice(this.data.indexOf(item), 1);
}
getItems() {
return [...this.data];
}
}
const textStorage = new DataStorage<string>();
textStorage.addItem("Max");
textStorage.addItem("Manu");
textStorage.removeItem("Max");
console.log(textStorage.getItems());