title: Declaring abstract method in TypeScript
body: <p>I am trying to figure out how to correctly define abstract methods in TypeScript:</p>
  
  <p>Using the original inheritance example:</p>
  
  <pre><code>class Animal {
      constructor(public name) { }
      makeSound(input : string) : string;
      move(meters) {
          alert(this.name + " moved " + meters + "m.");
      }
  }
  
  class Snake extends Animal {
      constructor(name) { super(name); }
      makeSound(input : string) : string {
          return "sssss"+input;
      }
      move() {
          alert("Slithering...");
          super.move(5);
      }
  }
  </code></pre>
  
  <p>I would like to know how to correctly define method makeSound, so it is typed and possible to overried.</p>
  
  <p>Also, I am not sure how to define correctly <code>protected</code> methods - it seems to be a keyword, but has no effect and the code won't compile.</p>