title: 'compile-time' way to get all property names defined interface
body: <p>I'd like to create a generic TypeScript class for rendering (as a HTML list) of an array of objects which implement a specific <code>interface</code>.</p>
  
  <p>e.g.</p>
  
  <pre><code>class GenericListRenderer&lt;T&gt; {
    items: T[];
  
   constructor(listItems: T[], className?: string){
        this.items = listItems;
        ...
      }
  
      private getPropertyNames(): string[]{
  
      // What is the best way to access all property names defined in
      // TypeScript interface 'T' that was used in this generic?
      ...   
      }
  
      render(){
        var propNames: string[] = this.getPropertyNames();
        // render list with each item containing set of all 
        // key(prop name)/value pairs defined by interface 'T'  
        ...
  
      }
  }
  </code></pre>
  
  <p>Q: what would be the best way to get a 'compile-time' list of all property names defined in the specified () TypeScript interface?</p>
  
  <p>Like C++ templates, I believe that  TypeScript could resolves these generics during "compile time", when TypeScript type information (like an interface supplied to the generic  used to instantiate a particular object) is readily available. </p>
  
  <p>Since all the required type information is potentially supplied, I was just curious if there was a TypeScript extension/facility available to access this info w/o excessive runtime filtering of 'vanilla' Javascript objects -- which might be problematic due to ambiguous inheritance issues (e.g. desired TypeScript inherited interface properties may get filtered out if runtime, generic, Javascript (obj.hasOwnProperty(prop)) is used for filtering properties).</p>
  
  <p>This useful property introspection potential could be unambiguously resolved with TypeScript's super-set of type meta-data during 'compile-time' vs trying to resolve this information in the translated Javascript, when all of this type information is discarded. </p>
  
  <p>I'd hate to 'reinvent-the wheel' with a potentially imperfect Javascript hack if a standard (TypeScript) approach exists.</p>