title: How to declare interface with static method and constructor signature in TypeScript?
body: <p>I have two classes with common static method. What's the best way to add common interface which includes static method implementation and constructor signature?</p>
  
  <p>I wrote <code>BitcoinHDWallet</code> and <code>EthereumHDWallet</code> classes which implement wallet logic for corresponded blockchains. I would like to add common interface <code>HDWallet</code> which going to describe logic to work with both of them so user can do:</p>
  
  <pre><code>    const multiWallet: Array&lt;HDWallet&gt; = [];
      multiWallet[0] = new BitcoinHDWallet(...);
      multiWallet[1] = new EthereumHDWallet(...);
  </code></pre>
  
  <p>These two classes share some common static methods.</p>
  
  <p>0) If I use <code>abstract class</code> as the way to describe interface, I don't know how to add constructor signature.</p>
  
  <p>1) If I use <code>interface</code>, I can't add static method implementation. </p>
  
  <p>Ideally, I want to do something like that:</p>
  
  <pre><code>abstract class HDWallet {
    /**
     * Return new random mnemonic seed phrase
     */
    static generateMnemonic(): string {
      return Bip39.generateMnemonic();
    }
  
    constructor(bip39SeedPhrase: string, password?: string, testnet?: boolean);
  
    abstract getAddress(addressIndex?: number) : string;
  
    abstract async getBalance(address? : string) : Promise&lt;number&gt;; 
  
    ...
  }
  
  
  class BitcoinHDWallet extends HDWallet {...}
  class EthereumHDWallet extends HDWallet {...}
  
  </code></pre>