-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfile2.ts
More file actions
93 lines (76 loc) · 1.79 KB
/
file2.ts
File metadata and controls
93 lines (76 loc) · 1.79 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
interface Emp {
id: number;
nm: string;
pos: string;
sal: number;
getDet(): string;
bon?: number;
calcBon?(pct: number): void;
}
type ID = number;
type Nm = string;
type Pos = string;
type Sal = number;
class FTEmp implements Emp {
bon?: number;
constructor(
public id: ID,
public nm: Nm,
public pos: Pos,
public sal: Sal
) {}
getDet(): string {
return `id: ${this.id}, name: ${this.nm}, position: ${this.pos}, salary: $${this.sal}/year`;
}
calcBon(pct: number): void {
this.bon = (this.sal * pct) / 100;
}
}
class PTEmp implements Emp {
bon?: number;
constructor(
public id: ID,
public nm: Nm,
public pos: Pos,
public hrRate: number,
public hrsPerWk: number
) {}
get sal(): number {
return this.hrRate * this.hrsPerWk * 52;
}
getDet(): string {
return `id: ${this.id}, name: ${this.nm}, position: ${this.pos}, salary: $${this.sal}/year (hourly rate: $${this.hrRate}, hours/week: ${this.hrsPerWk})`;
}
calcBon(pct: number): void {
this.bon = (this.sal * pct) / 100;
}
}
class ContEmp implements Emp {
bon?: number;
constructor(
public id: ID,
public nm: Nm,
public pos: Pos,
public hrRate: number,
public contDur: number
) {}
get sal(): number {
return this.hrRate * 40 * 4 * this.contDur;
}
getDet(): string {
return `id: ${this.id}, name: ${this.nm}, position: ${this.pos}, contract duration: ${this.contDur} months, total pay: $${this.sal}`;
}
calcBon(pct: number): void {
this.bon = (this.sal * pct) / 100;
}
}
const emps: Emp[] = [
new FTEmp(1, "charvi", "dev", 90000)
];
emps.forEach(emp => {
console.log(emp.getDet());
if (emp.calcBon) {
emp.calcBon(10);
console.log(`bonus: $${emp.bon}`);
}
});