title: Naming abstract classes and Interfaces in TypeScript
body: <p>There are debates and no consistency in this question, so I want to clarify naming standards for class, file names, suffixes and others for typescript.
  I want to know, how you name abstract classes, interfaces and logically organize code in your Typescript projects?</p>
  
  <p><strong>Possible solutions:</strong> </p>
  
  <p>For interfaces:</p>
  
  <ul>
  <li>with "I" as a prefix</li>
  <li>with "Interface" as a suffix </li>
  <li>with nothing added at all</li>
  </ul>
  
  <p>For abstract classes:</p>
  
  <ul>
  <li>with "Abstract" as prefix</li>
  <li>something like "Base" as a prefix</li>
  <li>with nothing at all</li>
  </ul>
  
  <p>Example with C#</p>
  
  <pre><code>public class User : AbstractUser, IUser
  </code></pre>
  
  <p>Same in Java and PHP</p>
  
  <pre><code>public class User extends AbstractUser implements UserInterface
  </code></pre>
  
  <p>And in Typescript</p>
  
  <pre><code>export class User extends AbstractUser implements UserInterface
  </code></pre>
  
  <p>This is the normal approach used in frameworks based on languages such as C#, Java and modern PHP7+</p>
  
  <hr>
  
  <p>Microsoft is recommending add "Interface" as a suffix, which for me is correct.
  <a href="https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Interfaces.md#class-types" rel="noreferrer">https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Interfaces.md#class-types</a></p>
  
  <p>Another popular style guide is suggesting not to add any suffixes for prefixes to interfaces, for me violates the rules, readability and overall looks wrong. <a href="https://basarat.gitbooks.io/typescript/content/docs/styleguide/styleguide.html#interface" rel="noreferrer">https://basarat.gitbooks.io/typescript/content/docs/styleguide/styleguide.html#interface</a></p>
  
  <pre><code>export class User extends AbstractUser implements User
  </code></pre>