Browse Source

5.7: extending classes and implementing interfaces.

Frederic G. MARAND 5 years ago
parent
commit
2413c92f38
5 changed files with 28 additions and 8 deletions
  1. 3 8
      app/employee.ts
  2. 7 0
      app/engineer.ts
  3. 5 0
      app/manager.ts
  4. 12 0
      app/webdeveloper.ts
  5. 1 0
      tsconfig.base.json

+ 3 - 8
app/enterprise.ts → app/employee.ts

@@ -1,12 +1,7 @@
 interface Employee {
   name: string;
   title: string;
-}
-
-interface Manager extends Employee {
-  departement: string;
-  numOfEmployees: number;
-  scheduleMeeting: (topic: string) => void;
+  logID: () => string;
 }
 
 // Implements Employee and more, so:
@@ -20,11 +15,11 @@ let dev = {
   editor: 'VSCode',
 };
 
-let newEmployee : Employee = dev;
+let newEmployee : Employee = { ...dev, logID: () => this.name };
 
 function foo(e: Employee) {
   console.log(e.name + ": " + e.title);
 }
 
-foo(dev);
+// foo(dev);
 foo(newEmployee);

+ 7 - 0
app/engineer.ts

@@ -0,0 +1,7 @@
+class Engineer implements Employee {
+  name: string;
+  title: string;
+  logID() {
+    return `${this.name} - ${this.title}`;
+  }
+}

+ 5 - 0
app/manager.ts

@@ -0,0 +1,5 @@
+interface Manager extends Employee {
+  departement: string;
+  numOfEmployees: number;
+  scheduleMeeting: (topic: string) => void;
+}

+ 12 - 0
app/webdeveloper.ts

@@ -0,0 +1,12 @@
+class WebDeveloper extends Developer {
+  favoriteEditor: string;
+  writeTypeScript(): void {
+    // Write awesome code.
+  }
+}
+
+let webdev = new WebDeveloper();
+webdev.department = 'Software Engineering';
+webdev.favoriteEditor = 'WebStorm';
+webdev.documentRequirements('Markdown');
+webdev.writeTypeScript();

+ 1 - 0
tsconfig.base.json

@@ -2,6 +2,7 @@
   "compilerOptions": {
     /* Basic Options */
     "target": "es5",
+    "lib": ["es2015", "dom"],
     // "module": "commonjs",
     "sourceMap": true,
     "outDir": "js",