How to define static property in TypeScript interface

前端 未结 14 1268
你的背包
你的背包 2020-11-28 05:49

I just want to declare a static property in typescript interface? I have not found anywhere regarding this.

interface myInterface {
  static         


        
14条回答
  •  醉话见心
    2020-11-28 06:18

    You can define interface normally:

    interface MyInterface {
        Name:string;
    }
    

    but you can't just do

    class MyClass implements MyInterface {
        static Name:string; // typescript won't care about this field
        Name:string;         // and demand this one instead
    }
    

    To express that a class should follow this interface for its static properties you need a bit of trickery:

    var MyClass: MyInterface;
    MyClass = class {
        static Name:string; // if the class doesn't have that field it won't compile
    }
    

    You can even keep the name of the class, TypeScript (2.0) won't mind:

    var MyClass: MyInterface;
    MyClass = class MyClass {
        static Name:string; // if the class doesn't have that field it won't compile
    }
    

    If you want to inherit from many interfaces statically you'll have to merge them first into a new one:

    interface NameInterface {
        Name:string;
    }
    interface AddressInterface {
        Address:string;
    }
    interface NameAndAddressInterface extends NameInterface, AddressInterface { }
    var MyClass: NameAndAddressInterface;
    MyClass = class MyClass {
        static Name:string; // if the class doesn't have that static field code won't compile
        static Address:string; // if the class doesn't have that static field code won't compile
    }
    

    Or if you don't want to name merged interface you can do:

    interface NameInterface {
        Name:string;
    }
    interface AddressInterface {
        Address:string;
    }
    var MyClass: NameInterface & AddressInterface;
    MyClass = class MyClass {
        static Name:string; // if the class doesn't have that static field code won't compile
        static Address:string; // if the class doesn't have that static field code won't compile
    }
    

    Working example

提交回复
热议问题